2009-11-28 10 views
8

Dieser Code verursacht eine Nullzeigerausnahme. Ich habe keine Ahnung warum:Java: Nullzeiger Ausnahme beim Unboxing Integer?

Ich habe es im Debugger untersucht, und alle lokalen Variablen sind nicht null. Wie sonst könnte das passieren? Die BiMap stammt von Google Collections.

+5

Nun, er fügte die Zeile die Ausnahme wurde geworfen. Ich denke nicht, dass das NullPointerException-Stacktrace in diesem Fall hilfreich ist, abgesehen davon, dass es die Zeile anzeigt – notnoop

Antwort

35

Die Nullzeigerausnahme ist ein Ergebnis des Unboxing des Ergebnisses inverse.get(animal). Wenn inverse den Schlüssel animal nicht enthält, gibt es null "vom Typ" Integer zurück. Da die Zuweisung zu einer int Referenz erfolgt, gibt Java den Wert in int aus, was zu einer Nullzeigerausnahme führt.

Sie sollten entweder nach suchen oder Integer als lokalen Variablentyp verwenden, um das Auspacken zu vermeiden, und entsprechend vorgehen. Der richtige Mechanismus hängt von Ihrem Kontext ab.

0

Sie müssen einen StackTrace haben. Es sagt genau, wo die Linie war, wo das passiert ist. Posten Sie es und wir können erzählen.

Von all den entsandten Code kann ich „erraten“ eine davon sind potentielle Nullpointer

Knoten null sein kann und node.getParent

des Knotens Mutter Aufruf kann null sein und parent.getChildren Aufruf werfen kann Npe

Einer der Geschwister möglicherweise Null und das Aufrufen sibling.equals kann Npe werfen

CellInfo kann null sein und cellInfo.inverse wird es werfen.

Schließlich die zurückgegebene "inverse" kann null sein und inverse.get() wird es werfen.

Puh !! ...

Also, um zu vermeiden, diese wild guessings tun, warum Sie nicht nur Ihre Stacktrace posten und wir herausfinden?

Es sollte so etwas wie:

java.lang.NullPointerException: null 
at YourClass.setSiblings(YouClass.java:22) 
at YourClass.setSiblng(YourClass.java: XX) 

etc ...

3

Überprüfen Sie für inverse.containsKey (Tier), BiMap inverse möglicherweise nicht das Tier.