jTree Problem im Event, Swing nicht Threadsicher?

Hallo, ich habe ein Problem mit meinem jTree.
Er ist so programmiert, das er wenn ein node selektiert wird
er aus einer Datei Daten holt und dann die Leafs anfügen soll.
jedoch bekomme ich eine Exception.
Ich vermute das es daran liegt das Swing nicht Thread sicher ist.
Allerdings habe ich es schon mit den Methoden invokeLater etc. probiert.
Leider ohne Erfolg.
Weiß nicht mehr weiter und suche schon seit über einer Woche.
Ich hoffe es kann mir jemand helfen.

Der Quellcode im Event ist folgender:

private JTree getJTree(String verzeichnis) {
if (jTree == null) {
try {
jTree = new JTree(daten.getTree(verzeichnis));
jTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
jTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
EventQueue.invokeLater( new Runnable() {
public void run() {
jTree.setModel(daten.getTreeWithNodeAt(verzeichnispfad + jTree.getSelectionPath().getPathComponent(1).toString()));
}
});

if(radioButtonStatus == KOMPLETT){
try{
jTable.setModel(daten.getTable(verzeichnispfad + e.getPath().getPathComponent(1).toString(), e.getPath().getPathComponent(2).toString()));
}catch(java.lang.IllegalArgumentException e1){
jTable.setModel(new ViewerTableModel());
}
} else if(radioButtonStatus == RELEVANT){
try{
jTable.setModel(daten.getRelevantTable(verzeichnispfad + e.getPath().getPathComponent(1).toString(), e.getPath().getPathComponent(2).toString()));
}catch(java.lang.IllegalArgumentException e1){
jTable.setModel(new ViewerTableModel());
}
}

}
});
} catch (java.lang.Throwable e) {
// TODO: Something
}
}
return jTree;
}

Und es gibt folgende Fehlermeldung:

Exception in thread „AWT-EventQueue-0“ java.lang.NullPointerException
at XmlViewerGui$2.run(XmlViewerGui.java:172)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Hoffe auf eine Lösung.
Viele Grüße
Andreas

Moien

Exception in thread „AWT-EventQueue-0“
java.lang.NullPointerException
at XmlViewerGui$2.run(XmlViewerGui.java:172)

Welche Zeile in dem Code ist Zeile 172 ?

cu

Es ist die Codezeile:

jTree.setModel(daten.getTreeWithNodeAt(verzeichnispfad + jTree.getSelectionPath().getPathComponent(1).toString()));

Die innerhalb der run-Methode von EventQueue.invokeLater steckt.

Gruß
Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

jTree.setModel(daten.getTreeWithNodeAt(verzeichnispfad +
jTree.getSelectionPath().getPathComponent(1).toString()));

Da nimmst du an dass tatsächlich was selektiert ist. Wieso ? (Tipp: der Listener wird auch aufgerufen wenn DEselekiert wird)

cu

jTree.getSelectionPath().getPathComponent(1).toString()));

Da nimmst du an dass tatsächlich was selektiert ist. Wieso ?
(Tipp: der Listener wird auch aufgerufen wenn DEselekiert
wird)

Und wieso Komponente 1? Überhaupt ist es erstmal sehr… hm, naja, gewagt, einfach .toString() aufzurufen, ohne vorher das Objekt geprüft zu haben. Das solltest Du auf jeden Fall

a) prüfen, ob überhaupt etwas selektiert wurde (siehe oben) und
b) wieviel selektiert wurde und
c) dann erst .toString() aufrufen.

Danach solltest Du eigentlich keine Probleme mehr haben.