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

Java Discussion :

[JList] Affichage et exception


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut [JList] Affichage et exception
    Bonjour,

    j'ai une interface graphique qui possède une JList dans un Jscrollpane.
    Cette JList à un defaultListModel.
    A certains moments, j'update la liste des éléments.
    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
     
    private final Map<String, Integer> myMap; // TreeMap
    public void updateMyList() {
       myModelList.clear();
       for (String str : myMap.keySet()) {
           myModelList.addElement( str);
       }
     this.validate(); //le this est un panel
    }
     
    .... init(){
    ...
            myModelList= new DefaultListModel();
            for (String str : myMap.keySet()) {
                myModelList.addElement(str);
            }
            myJList= new JList(myModelList);
            JScrollPane scrollPane = new JScrollPane(myJList);
     
    ...
     
    }


    Mais depuis ce matin, j'ai des soucis d'affichage : des fois (2 fois sur 5) la liste apparait vide. J'ai bien vérifié que je passait toujours dans la fonction, que ma map n'étaient pas vide, que le model n'était pas vide après ajout etc.

    En plus de ce problème, des fois (1 fois sur 3) une exception java apparait:

    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
     
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
            at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
            at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
            at javax.swing.plaf.basic.BasicListUI.getPreferredSize(Unknown Source)
            at javax.swing.JComponent.getPreferredSize(Unknown Source)
            at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source)
            at java.awt.Container.layout(Unknown Source)
            at java.awt.Container.doLayout(Unknown Source)
            at java.awt.Container.validateTree(Unknown Source)
            at java.awt.Container.validate(Unknown Source)
            at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
            at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
            at java.awt.event.InvocationEvent.dispatch(Unknown Source)
            at java.awt.EventQueue.dispatchEvent(Unknown Source)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
            at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
            at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            at java.awt.EventDispatchThread.run(Unknown Source)
    Je commence à caler pour résoudre ce problème.

    J'ai essayé en enlevant tout les this.validate, this.repaint etc.. mais rien n'y fait.

    Ci quelqu'un peut m'aider à résoudre ça, je lui en serait reconnaissante.

    Shaina

  2. #2
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Bon, j'ai résolu mon pb d'affichage et d'exception en entourant mon code par des

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                        // modification de mon model
                }
    Bon par contre toujours pas compris pourquoi ça ne m'avais jamais posé de problèmes avant...

  3. #3
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Bonjour,

    C'est un probleme typique lié à swing. Si tu lis la javadoc, il est dit tres explicitement que les modifications des composants swing doivent se faire dans le thread EDT.
    Pour cela, il faut le faire soit dans l'action/mouse listener, soit appeler SwingUtilities.invokeLater/SwingUtilities.invokeAndWait. Dans le cas d'un traitement long (par exemple connexion à une BDD), il y a la classe SwingWorker qui est faite pour.

    Quand au fait que ca ne posait pas de probleme avant, il faut bien comprendre que la raison pour laquelle il faut utiliser l'EDT, c'est parce qu'il n'y a pas de protection (synchronisation) dans le code de raffraichissement de l'IHM. Donc si tu tapes directement dans la liste hors de l'EDT, le fonctionnement n'est pas garanti. Ca ne veut pas dire que ca ne va jamais marcher. Ca dépend juste des timings. En gros, avant, tu avais plus de pot

    a+

  4. #4
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Bonjour,

    C'est un probleme typique lié à swing. Si tu lis la javadoc, il est dit tres explicitement que les modifications des composants swing doivent se faire dans le thread EDT.
    Pour cela, il faut le faire soit dans l'action/mouse listener, soit appeler SwingUtilities.invokeLater/SwingUtilities.invokeAndWait. Dans le cas d'un traitement long (par exemple connexion à une BDD), il y a la classe SwingWorker qui est faite pour.

    Quand au fait que ca ne posait pas de probleme avant, il faut bien comprendre que la raison pour laquelle il faut utiliser l'EDT, c'est parce qu'il n'y a pas de protection (synchronisation) dans le code de raffraichissement de l'IHM. Donc si tu tapes directement dans la liste hors de l'EDT, le fonctionnement n'est pas garanti. Ca ne veut pas dire que ca ne va jamais marcher. Ca dépend juste des timings. En gros, avant, tu avais plus de pot

    a+
    Merci pour ton explication, c'est plus clair maintenant !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage texte exception
    Par alex2746 dans le forum Général Java
    Réponses: 2
    Dernier message: 20/10/2008, 17h36
  2. [Exception] affichage des exceptions dans une jsp
    Par phoebe dans le forum Struts 1
    Réponses: 8
    Dernier message: 13/02/2008, 15h31
  3. [SWING] [JLIST] Affichage dynamic d une liste de panel
    Par wanchy dans le forum Composants
    Réponses: 1
    Dernier message: 17/09/2007, 18h42
  4. [Tomcat] Affichage des exceptions à l'écran : empêcher
    Par divail dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 30/01/2006, 21h03
  5. [Exception]Affichage des exceptions
    Par Guybrush dans le forum Général Java
    Réponses: 2
    Dernier message: 11/01/2005, 14h51

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