Java: Nullzeiger-Ausnahme beim Unboxing von Integer?

8

Dieser Code verursacht eine Nullzeigerausnahme. Ich habe keine Ahnung warum:

%Vor%

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.

    
Nick Heiner 28.11.2009, 05:42
quelle

3 Antworten

35

Die Null-Zeiger-Ausnahme ist ein Ergebnis des Entpackens des Ergebnisses von inverse.get(animal) . Wenn inverse den Schlüssel animal nicht enthält, wird null , "vom Typ" Integer zurückgegeben. Da die Zuweisung zu einer int -Referenz erfolgt, hebt Java den Wert in int auf, was zu einer Nullzeigerausnahme führt.

Sie sollten entweder nach inverse.containsKey(animal) suchen oder Integer als lokalen Variablentyp verwenden, um das Unboxing zu vermeiden und entsprechend zu agieren. Der richtige Mechanismus hängt von Ihrem Kontext ab.

    
notnoop 28.11.2009, 05:46
quelle
3

check für inverse.containsKey (tier), BiMap inverse möglicherweise nicht das Tier.

    
Summy 28.11.2009 08:31
quelle
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.

Aus all dem geposteten Code, den ich "raten" kann, ist eine mögliche NullPointerException

Knoten kann null sein und node.getParent

aufrufen

Das übergeordnete Element des Knotens kann null sein und das Aufrufen von parent.getChildren kann Npe

auslösen

Einer der Geschwister darf null sein und der Aufruf von sibling.equals darf Npe

auslösen

cellInfo darf null sein und cellInfo.inverse wird es werfen.

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

Puh !! ...

Also, um diese wilden Spekulationen zu vermeiden, warum postest du nicht einfach deinen Stacktrace und wir finden es heraus?

Es sollte ungefähr so ​​aussehen:

%Vor%

usw. ..

    
OscarRyz 28.11.2009 05:59
quelle