IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTextArea] affichage Map grande capacité


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 31
    Points
    31
    Par défaut [JTextArea] affichage Map grande capacité
    j'ai une HashMap composé de pas moins de 90000 (oui vous avez bien lu ) string et j'aimerais les afficher dans un JTextArea mais ca bloque a l'affichage ou alors j'ai deja eu comme exception,outofmemory.....

    [ Sujet déplacé depuis le forum java par Viena ]
    Les Règles du Forum

  2. #2
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    mmh...
    ca me parait bizarre ton truc.
    Quelle est la longeur de tes "90 000 String" en moyenne ?

    Moi il m'est arivé de traiter plus de 120 000 String sans même y penser!

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    voila un exemple
    24/03/2005 17:38:00;12150;49.54;49.54;49.54;49.54;1311.00;4078.31

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    Salut,
    par curiosité, as-tu essayé de créer un objet Document, d'insertLine les lignes de ton fichier où les entrées de ta Map, et de new TextArea(Document); pour voir si tu dépasses là aussi la capacité mémoire à un moment où à un autre ?
    A++

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par jcodeunpeu
    Salut,
    par curiosité, as-tu essayé de créer un objet Document, d'insertLine les lignes de ton fichier où les entrées de ta Map, et de new TextArea(Document); pour voir si tu dépasses là aussi la capacité mémoire à un moment où à un autre ?
    A++
    tu aurais un exemple de code par hasard?
    merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    Salut, dans l'état, pas testé, mais çà ressemblerait à çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    class maBigMap extends PlainDocument {
     public maBigMap (HashMap map, JTextArea jta){
     
        super().createDefaultRoot();
        this.uneBig = map;
        this.jtaPourUneBig = jta; 
        this.tryUneBig();
      }
     void tryUneBig(){
     
      StringBuffer sb= new StringBuffer("");
      for(Iterator I = m.entrySet().iterator();I.hasNext();) {
        sb.append(I.next() + "\n");
      }
      int index = 0;
      String uneLigne = null;
      while((index = sb.indexOf("\n")) != -1){
        uneLigne = sb.substring(0, index + 1);
        try {
          this.getDefaultRootElement().getDocument().
            insertString(this.getLength() , uneLigne.length(), null);
        }catch(BadLocationException ble) {
           /* */ System.out.println("Erreur maBigMap : " + ble);}
         sb = sb.substring(index + 1);  
       }
       this.jtaPourUneBig.setDocument(this);
     }// fin méthode  8) 
    }// fin de la classe
    mais tu pourrai aussi ajouter une fois le document créé, :
    jta = new JTextArea(this);
    A++

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    en fait je pensais faire plus simple :
    recuperer toutes les lignes et les inserer dans un string avec un \n a chaque fin de ligne et ainsi renvoyer ce string dans la methode Afficher() et faire juste un JTexteArea.append(maclasse.afficher())
    ceci marche bien pour un nb de lignes pas trop imposant mais la pour 90000 c'est tres lent....
    alors j'ai essaye de modifier le type de retour de la methode afficher() en renvoyant directement la hashmap ou un ArrayList mais ca marche pa smieux

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    Re, effectivement 8)
    de cette facon là ce n'est pas vraiment possible :
    1) apres avoir corrigé les erreurs diverses et variées dont je commettais les méfaits ce matin, super().creatBlaBlah entre autre, pas compilable ...
    2) avoir lancé celle-ci, je me résignais à ctrl + alt + supr au bout de 5 minutes, 100 % d'UC, 584000 ko de mém, et 594 Threads lancés.
    3) je faisais donc autrement et je te propose donc un truc qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    public class Tony_big extends PlainDocument{
     
    // variables	*********************
    static JDialog dial;					
    final HashMap m = new HashMap(); 
    JTextArea jtaPourUneBig;
    // Constructeur	*******************
    public Tony_big() {
      super.createDefaultRoot();
      this.getDefaultRootElement();
      int i=0;
      long deb = System.currentTimeMillis();
      //	Crée la map pour test
      while(i++ < 90000) {
        String cle = "test_" + i;
        String objet = "dflgjdflgjldfjl56456464:5:646456;:4:4k64";	
        m.put(cle, objet);
      }
      long fin = System.currentTimeMillis();
      String detailChargement = 
      "chargement en " + (fin - deb) + " millisecondes";
      deb = fin;
      String uneLigne = detailChargement + "\n"; 
      for(Iterator I = m.keySet().iterator();I.hasNext();) { 
        Object tmp = I.next();
        uneLigne = "  " + tmp + "\t" + m.get(I.next()) ;
        try { 
           this.getDefaultRootElement().getDocument().
             insertString(this.getLength(), uneLigne + "\n",null);
        }catch(BadLocationException ble) { 
             /* */ System.out.println("Erreur maBigMap : " + ble);} 
      }
      fin = System.currentTimeMillis();
      uneLigne = "  DetailDocument insertion " + 
      (fin - deb) + "millisecondes" ; 
      try { 
        this.getDefaultRootElement().getDocument().
          insertString(this.getLength(), uneLigne + "\n",null);  
      }catch    (BadLocationException ble) { 
        /* */ System.out.println("Erreur maBigMap : " + ble);} 
       // initialise un dialog	********
      dial = new JDialog(new JFrame());
      initGUI();
      dial.setTitle("jtaPourUneBig");
      dial.setVisible(true);
      // place le contenu de la map. **
      jtaPourUneBig.setDocument(this); 
    }//  fin constructeur
     /**
     * @param args
     */
     public static void main(String[] args) {
     // TODO Auto-generated method stub
     new Tony_big();
     }
     private void initGUI() {
       dial.setSize (600,400);
       dial.getContentPane().setLayout(null);
       dial.setTitle("");
       try {
          {
              // ********** Boutton Quitter			
              JButton jbQuitter= new JButton("Quitter");
              jbQuitter.setBounds(10, 10, 80, 20);
              jbQuitter.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                  System.exit(0);
                }
              });
              dial.getContentPane().add(jbQuitter);
           }
           {
              JPanel panel = new JPanel();
              dial.getContentPane().add(panel);
              panel.setBounds(10, 40, 500, 350);
              panel.setVisible(true);
              panel.setLayout(null);
              panel.setBorder(
              BorderFactory.createBevelBorder(
              BevelBorder.LOWERED, null, null, null, null));
              {
                  JScrollPane  jspSaisie = new JScrollPane();
                  jspSaisie.setAutoscrolls(true);
                  panel.add(jspSaisie);
                  jspSaisie.setBounds(0, 0, 500, 350);
                  {
                      jtaPourUneBig = new JTextArea();
                      jtaPourUneBig.setBounds(20,20, 550, 380);
                      jspSaisie.setViewportView(jtaPourUneBig);
                      jtaPourUneBig.setEditable(true);
                      jtaPourUneBig.setEnabled(true);
                   }
                }
             }
         } catch (Exception e) {
                 e.printStackTrace();System.out.println("Erreur initGuy:"); }
        }// fin init
    }// fin de classe
    900 millisecondes pour remplir la map, 1 seconde et demie pour l'afficher,
    c'est franchement mieux non ?
    A++

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    je vais voir pour adapter ca a mon programme mais d'avance je te remercie...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    pas de quoi tony_big_guy, ou alors à charge de revanche pas vrai ...
    A++

Discussions similaires

  1. stockage grande capacité
    Par Yepazix dans le forum Windows Vista
    Réponses: 3
    Dernier message: 16/07/2007, 11h31
  2. Install XP sur disques grande capacité
    Par zakuli dans le forum Windows XP
    Réponses: 4
    Dernier message: 25/11/2006, 16h56
  3. Affichage de grand nombre
    Par CodeMikiman dans le forum Langage
    Réponses: 3
    Dernier message: 15/10/2006, 12h19
  4. Probleme de form si affichage en grande police (ppp)
    Par bourbon dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/04/2006, 13h01
  5. [Conseil] Affichage maps + objets
    Par Mathieu.J dans le forum OpenGL
    Réponses: 4
    Dernier message: 04/06/2004, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo