Hi,
ich programmiere gerade etwas in Java und kriege eine NullPointerException.
FolgenderCode ist wichtig:
private void checkTree(JTreePanelNode current, JTree dest) {
for (int i = 0; i < current.getChildCount(); i++) {
JTreePanelNode node = (JTreePanelNode) current.getChildAt(i);
if (!(node.getState() == JTreePanelNode.State.FOLDER)) {
if (!isExistent(node, dest)) {
node.setState(JTreePanelNode.State.BAD);
}
}
System.out.println(node.getState());
checkTree(node, dest);
}
}
private boolean isExistent(JTreePanelNode search, JTree dest) {
JTreePanelNode root = (JTreePanelNode) dest.getModel().getRoot();
return searchTree(root, search);
}
private boolean searchTree(JTreePanelNode root, JTreePanelNode search) {
for (int i = 0; i < root.getChildCount(); i++) {
JTreePanelNode current = (JTreePanelNode) root.getChildAt(i);
if (current.getName().equals(search.getName())) {
boolean isDifferent = false;
for(String key : current.getHashes().keySet()) {
if(current.getHashes().get(key) != search.getHashes().get(key)) {
isDifferent = true;
}
}
System.out.println("TEST: " + current.getState() + " bool: " + isDifferent);
if(isDifferent) {
current.setState(JTreePanelNode.State.DUNNO);
}
else {
current.setState(JTreePanelNode.State.GOOD);
}
System.out.println("TEST2: " + current.getState());
return true;
}
if (searchTree(current, search)) {
return true;
}
}
checkTree() ruft die beiden anderen gezeigten Funktionen auf. Hierbei geht es nur darum den Inhalt von node so zu verändern, wie ich ihn später benötige. Laut http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value ist Java pass by value, dementsprechend wird die Referenz übegeben und somit müssten alle 3 Funktionen jeweils auf dem selben Objekt arbeiten. Obwohl ich Funktion 1 aufrufe und diese die Arbeit an Funktion 3 weitergibt und in Funktion 3 der State von dem Node geändert wird, hat Node wieder einen anderen State (nämlich null) in Funktion 1, wenn Funktion 3 fertig ausgeführt ist.
Warum ist das so, wenn sie doch alle auf dem selben Objekt arbeiten?
Danke!