Fehler beim Einklappen eines Trees

JensMander

Bekanntes Mitglied
Hallo ihr,
wenn ich in meinem Baum einen Knoten selektiert habe und daraufhin den Elternknoten zusammenklappe erhalte ich folgende Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at of.startfenster$12.valueChanged(startfenster.java:583)
at javax.swing.JTree.fireValueChanged(JTree.java:2820)
at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:3191)
at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:629)
at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTreeSelectionModel.java:1078)
at javax.swing.tree.DefaultTreeSelectionModel.removeSelectionPaths(DefaultTreeSelectionModel.java:497)
at javax.swing.JTree.removeDescendantSelectedPaths(JTree.java:3516)
at javax.swing.JTree.setExpandedState(JTree.java:3404)
at javax.swing.JTree.collapsePath(JTree.java:2188)
at javax.swing.plaf.basic.BasicTreeUI.toggleExpandState(BasicTreeUI.java:2215)
at javax.swing.plaf.basic.BasicTreeUI.handleExpandControlClick(BasicTreeUI.java:2191)
at javax.swing.plaf.basic.BasicTreeUI.checkForClickInExpandControl(BasicTreeUI.java:2149)
at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3511)
at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3459)
at java.awt.Component.processMouseEvent(Component.java:6260)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

An besagter Stelle rufe ich folgende Funktion auf:


Java:
String value =  e.getNewLeadSelectionPath().getPathComponent(0).toString();

Wie kann ich denn das umgehen?
mfg
Jens
 
Naja eine Nullpointer-Exception sagt ja aus, dass du versucht auf ein Objekt zuzugreifen dass noch niicht instanziert und somit null ist.
Du solltest mal überprüfen, wenn der Elternknoten angeklickt wird, ob jegliche Objekte die dann manipuliert werden auch instanziert sind.

Übrigens: Ein wenig mehr Code wäre nicht schlecht...

Grüße
 
Hi, aus meiner sicht ist aber alles instanziert und nicht null, glaube aber zu wissen woran es liegt. Und zwar tritt der Fehler auf, wenn ich im Baum ein Knoten selektiert habe und anschließend den Baum bearbeite und mit baum.reload() zusammenklappe. Der selektierte Knoten ist durch das .reload nicht mehr sichtbar und dadurch wahrscheinlich null. Ein clearSelection() hilft leider gar nicht.
Hier einmal die Select-Funktion die ich nutze:

Java:
tree.addTreeSelectionListener(new TreeSelectionListener() {
			public void valueChanged(TreeSelectionEvent e) {
				System.out.println(e);
				String value =  e.getNewLeadSelectionPath().getPathComponent(0).toString();
				System.out.println(value);
				//String value2 =  e.getNewLeadSelectionPath().getPathComponent(1).toString();
				//int kinder = treemodel.getChildCount(e.getNewLeadSelectionPath().getPathComponent(1));
if(value2.equals("Startgeneration"))
				{
tabbedPane.setSelectedIndex(0);
System.out.println("Startgen");
}
else
				{
					tabbedPane.setSelectedIndex(1);
	}
		});

und die Funktion bei deren Benutzung der Fehler auftritt(verweis auf die obige Funktion Zeile String value.....:
Java:
button_speichern_panel_start.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//tree.clearSelection();
				variablen.files_start[0] = new File(txt_pfad1_panel_start.getText());
				DefaultMutableTreeNode modellstruktur = (DefaultMutableTreeNode)treemodel.getRoot();
				((DefaultMutableTreeNode) modellstruktur.getRoot().getChildAt(0).getChildAt(0).getChildAt(0)).setUserObject(txt_pfad1_panel_start.getText());
				((DefaultMutableTreeNode) modellstruktur.getRoot().getChildAt(0).getChildAt(1).getChildAt(0)).setUserObject(txt_pfad2_panel_start.getText());
				txt_pfad1_panel_start.setText("erfolgreich geladen");
				variablen.files_start[1] = new File(txt_pfad2_panel_start.getText());
				txt_pfad2_panel_start.setText("erfolgreich geladen");
				treemodel.reload();
			}
		});
 
Zuletzt bearbeitet:
okay, vielen dank. ich denke ich muss also testen ob es sich um eine selection bzw. eine deselction handelt....vielen dank.

so ich habe den Fehler behoben, ob das nun qualitätiv hochwertig ist, weiß ich nicht aber es funktioniert:

Java:
//testen ob etwas selektiert ist:
if(s.getNewLeadSelectionPath()!=null)
{
.....wenn nicht null, dann ist etwas selektiert und die Funktion kann ausgeführt werden
}
 
Zuletzt bearbeitet:

Zurück
Oben