Java++: Java Pass by Reference

Beitrag lesen

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!