OVH Cloud OVH Cloud

JTree.updateUI --> NullPointerException

2 réponses
Avatar
LR
Salut,

J'utilise un JTree pour afficher une structure de données. Lorsqu'un noeud
final (pas une catégorie) est sélectionné, j'affiche un JTable pour
présenter le détail des données du noeud sélectionné.

Tout fonctionne à merveille mais depuis que j'ai ajouté un appel à la
méthode updateUI de mon JTree depuis l'événement "tableChanged" de ma
JTable, j'obtient l'erreur ci-dessous à chaque fois que je sélectionne un
noeud pour en afficher le détail :
java.lang.NullPointerException

at javax.swing.plaf.basic.BasicTreeUI.isToggleEvent(BasicTreeUI.java:2138)

at
javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.java:2193)

at
javax.swing.plaf.basic.BasicTreeUI$MouseHandler.handleSelection(BasicTreeUI.
java:2840)

at
javax.swing.plaf.basic.BasicTreeUI$MouseHandler.mousePressed(BasicTreeUI.jav
a:2801)

at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:222)

at java.awt.Component.processMouseEvent(Component.java:5097)

at java.awt.Component.processEvent(Component.java:4897)

at java.awt.Container.processEvent(Container.java:1569)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Container.dispatchEventImpl(Container.java:1627)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3195)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

at java.awt.Container.dispatchEventImpl(Container.java:1613)

at java.awt.Window.dispatchEventImpl(Window.java:1606)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.ja
va:201)

at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java
:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


Si je n'avais pas testé mon programme après chaque nouvelle ligne de code,
je n'aurais jamais su d'où venait le problème !
Mais c'est certain, si j'enlève l'appel à updateUI, l'erreur ne se produit
plus mais je dois attendre un repaint de mon contrôle pour que les
modifications que j'ai entré dans ma JTable se reportent sur le JTree.

Comment régler ça ?

Merci d'avance pour votre aide
A+Lilian

2 réponses

Avatar
jerome moliere
LR wrote:

Salut,

J'utilise un JTree pour afficher une structure de données. Lorsqu'un noeud
final (pas une catégorie) est sélectionné, j'affiche un JTable pour
présenter le détail des données du noeud sélectionné.

Tout fonctionne à merveille mais depuis que j'ai ajouté un appel à la
méthode updateUI de mon JTree depuis l'événement "tableChanged" de ma
JTable, j'obtient l'erreur ci-dessous à chaque fois que je sélectionne un
noeud pour en afficher le détail :
java.lang.NullPointerException

at javax.swing.plaf.basic.BasicTreeUI.isToggleEvent(BasicTreeUI.java:2138)

at
javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.java:2193)

at
javax.swing.plaf.basic.BasicTreeUI$MouseHandler.handleSelection(BasicTreeUI.
java:2840)

at
javax.swing.plaf.basic.BasicTreeUI$MouseHandler.mousePressed(BasicTreeUI.jav
a:2801)

at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:222)

at java.awt.Component.processMouseEvent(Component.java:5097)

at java.awt.Component.processEvent(Component.java:4897)

at java.awt.Container.processEvent(Container.java:1569)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Container.dispatchEventImpl(Container.java:1627)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3195)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

at java.awt.Container.dispatchEventImpl(Container.java:1613)

at java.awt.Window.dispatchEventImpl(Window.java:1606)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.ja
va:201)

at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java
:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


Si je n'avais pas testé mon programme après chaque nouvelle ligne de code,
je n'aurais jamais su d'où venait le problème !
Mais c'est certain, si j'enlève l'appel à updateUI, l'erreur ne se produit
plus mais je dois attendre un repaint de mon contrôle pour que les
modifications que j'ai entré dans ma JTable se reportent sur le JTree.

Comment régler ça ?
en utilisant plutot une solution de design et en tirant parti du MVC

integre dans tes composants SWING....
sur l'event dans ta JTable tu dois mettre a jour ton TreeModel et le
refresh se fera tout seul

Jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Avatar
LR
Salut,

J'utilise un JTree pour afficher une structure de données. Lorsqu'un
noeud


final (pas une catégorie) est sélectionné, j'affiche un JTable pour
présenter le détail des données du noeud sélectionné.

Tout fonctionne à merveille mais depuis que j'ai ajouté un appel à la
méthode updateUI de mon JTree depuis l'événement "tableChanged" de ma
JTable, j'obtient l'erreur ci-dessous à chaque fois que je sélectionne
un


noeud pour en afficher le détail :
java.lang.NullPointerException

at
javax.swing.plaf.basic.BasicTreeUI.isToggleEvent(BasicTreeUI.java:2138)



at

javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.java:2193)



at

javax.swing.plaf.basic.BasicTreeUI$MouseHandler.handleSelection(BasicTreeUI.


java:2840)


Si je n'avais pas testé mon programme après chaque nouvelle ligne de
code,


je n'aurais jamais su d'où venait le problème !
Mais c'est certain, si j'enlève l'appel à updateUI, l'erreur ne se
produit


plus mais je dois attendre un repaint de mon contrôle pour que les
modifications que j'ai entré dans ma JTable se reportent sur le JTree.

Comment régler ça ?
en utilisant plutot une solution de design et en tirant parti du MVC

integre dans tes composants SWING....
sur l'event dans ta JTable tu dois mettre a jour ton TreeModel et le
refresh se fera tout seul


OK merci pour ta réponse, je ne vais pas refaire toute l'architecture de mon
programme mais je saurai pour la prochaine fois...
J'ai remplacé updateUI() par repaint() comme j'aurais du le faire dès le
début.
A+Lilian