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

EDT/SwingWorker Java Discussion :

Substance Look and Feel


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut Substance Look and Feel
    Bonjour à tous,
    j'ai téléchargé le la librairie Substance.jar que j'ai intégré dans mon projet NetBeans normalement.

    Dans le main de ma forme je set le look and feel avec :

    public static void main(String args[]) {

    UIManager.setLookAndFeel(new SubstanceBusinessBlackSteelLookAndFeel());
    JFrame.setDefaultLookAndFeelDecorated(true);
    JDialog.setDefaultLookAndFeelDecorated(true);

    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    Form f=new Form();
    f.setVisible(true);
    }
    });
    }
    Tout fonctionne normalement, le skin est affiché.

    J'ai un bouton sur ma forme qui, lorsqu'il est clické, instancie un thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void connection_button_connectActionPerformed(java.awt.event.ActionEvent evt) {                                                    
     
            //SwingUtilities.invokeLater(new ConnectionThread());
           ConnectionThread th=new ConnectionThread();
           // ConnectionThread implemente Runnable, dans son contructeur elle instancie un thread et le start
        }
    je clique dessus et là l'exception suivante est affichée:
    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
     
    org.jvnet.lafwidget.UiThreadingViolationException: Component state change must be done on Event Dispatch Thread
            at org.jvnet.lafwidget.LafWidgetUtilities.testComponentStateChangeThreadingViolation(LafWidgetUtilities.java:589)
            at org.jvnet.lafwidget.animation.FadeStateListener$1.stateChanged(FadeStateListener.java:232)
            at javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.java:333)
            at javax.swing.DefaultButtonModel.setEnabled(DefaultButtonModel.java:192)
            at javax.swing.AbstractButton.setEnabled(AbstractButton.java:2065)
            at design.ConnectionThread.run(ConnectionThread.java:20)
            at java.lang.Thread.run(Thread.java:619)
    Exception in thread "connection_thread" org.jvnet.lafwidget.UiThreadingViolationException: Component state change must be done on Event Dispatch Thread
            at org.jvnet.lafwidget.LafWidgetUtilities.testComponentStateChangeThreadingViolation(LafWidgetUtilities.java:589)
            at org.jvnet.lafwidget.animation.FadeStateListener$1.stateChanged(FadeStateListener.java:232)
            at javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.java:333)
            at javax.swing.DefaultButtonModel.setEnabled(DefaultButtonModel.java:192)
            at javax.swing.AbstractButton.setEnabled(AbstractButton.java:2065)
            at design.ConnectionThread.run(ConnectionThread.java:20)
            at java.lang.Thread.run(Thread.java:619)
    En gros ce que j'ai compris c'est que l'évenement du bouton devait être géré par le Event Dispath Thread alors j'ai remplacé la création de mon thread par l'instruction que j'ai masquée i.e. : SwingUtilities.invokeLater(). Cett fois-ci mon thread s'est lancé (il a fait ce qu'il avait à faire) mais j'ai toujours les mêmes messages d'erreur.

    Mon programme a toujours bien marché avant que je ne rajoute ce Look and Feel . Aidez-moi svp à résoudre ce problème, j'ai longtemps cherché avant de vous écrire.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En fait ce n'est pas tout à fait ça.
    Ce mécanisme d'erreur a été implémenté par l'auteur de Substance afin de forcer les développeurs à coder de façon propre vis à vis de Swing.

    Ton problème ici est que tu modifie un composant Swing depuis un thread qui n'est pas le thread Graphique (à savoir l'Event Dispatch Thread ou EDT).
    Pour modifier un composant depuis un thread externe, il faut passer par la méthode SwingUtilities.invokeLater. Mais cette méthode ne doit servir qu'à faire des modifications de tes composants, et surtout pas à effectuer une tâche longue. C'est donc dans ton ConnectionThread que tu dois faire appel à cette méthode pour modifier tes composants.

    cf http://gfx.developpez.com/tutoriel/j...ing-threading/ (à lire de toute urgence).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut
    Bonjour!
    Merci pour votre réponse. Je ne pensais pas qu'il fallait faire invokeLater à l'intérieur de mon thread. Ca devrait marcher ça.
    Mais avant de recevoir votre réponse, j'avais cherché un peu et j'ai su qu'avec les versions antérieures à la version 5 de Substance ce problème ne se posait pas, i.e. qu'on nous force pas à utiliser le EDT.
    Je me suis donc arrêtée à ça, parce que reprendre toute mon application (qui est assez grande) en tenant compte de l'EDT me prendrait beaucoup de temps (et j'en ai pas).

    Mercii pour les infos

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut
    Ah oui, j'ai téléchargé la version Substance 4.3 qui marche très bien

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

Discussions similaires

  1. Probleme Look and Feel Substance
    Par Meepo dans le forum EDT/SwingWorker
    Réponses: 1
    Dernier message: 16/06/2009, 14h29
  2. [Débutant] couleur checkbox avec Look and feel substance
    Par bbyoulie dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/04/2008, 09h31
  3. Utilisation du look and feel 'substance'
    Par tiboudchou dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/03/2008, 22h39
  4. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 12h49
  5. Jbuilder9 Look and feel de borland
    Par wsrudmen dans le forum JBuilder
    Réponses: 6
    Dernier message: 26/06/2003, 19h07

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