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.