Java: null pointer exception lorsque unboxing Entier?
Ce code provoque une exception de pointeur null. Je n'ai aucune idée de pourquoi:
private void setSiblings(PhylogenyTree node, Color color) throws InvalidCellNumberException {
PhylogenyTree parent = node.getParent();
for (PhylogenyTree sibling : parent.getChildren()) {
if (! sibling.equals(node)) {
Animal animal = sibling.getAnimal();
BiMap<PhylogenyTree, Integer> inverse = cellInfo.inverse();
int cell = inverse.get(animal); //null pointer exception here
setCellColor(cell, color);
}
}
}
J'ai examiné dans le débogueur, et toutes les variables locales sont non-nulles. Sinon, comment pourrait-il se passer? Le BiMap est à partir de Google Collections.
Eh bien, il a inclus la ligne de la levée de l'exception. Je ne pense pas que le NullPointerException stacktrace est utile dans ce cas, outre pour pointer la ligne
OriginalL'auteur Nick Heiner | 2009-11-28
Vous devez vous connecter pour publier un commentaire.
L'exception de pointeur null est un résultat de l'unboxing le résultat de
inverse.get(animal)
. Siinverse
ne contient pas la cléanimal
, il retournenull
, "de type"Integer
. Étant donné que la cession soit à unint
de référence, Java unboxes la valeur dans unint
, résultant en une exception de pointeur null.Vous devriez vérifier pour
inverse.containsKey(animal)
ou de l'utilisationInteger
que la variable locale de type pour éviter de déballer et d'agir en conséquence. Le bon mécanisme dépend de votre contexte.OriginalL'auteur notnoop
vérifier inverse.containsKey(animal), BiMap inverse peut ne pas avoir de l'animal.
OriginalL'auteur Summy
Vous devez avoir une stacktrace. Il dit exactement ce que fut la ligne où c'est arrivé. De poste, nous pouvons le dire.
De toutes les posté code que j'ai peut "deviner" l'un de ces potentiels NullPointerException
nœud peut être nulle et l'appel
node.getParent
Parent du nœud peut être nulle, et en invoquant
parent.getChildren
peut jeter NpeUn o la fratrie peut être nulle, et en invoquant
sibling.equals
peut jeter NpecellInfo peut être nulle et
cellInfo.inverse
va le jeter.Enfin, le "inverse" retourné peut être null et
inverse.get()
va le jeter.Ouf!!...
Donc, pour éviter de faire de ce sauvage, les divinations, pourquoi ne pas vous suffit de poster votre stacktrace et nous le savoir?
Il devrait ressembler à:
etc.. .
OriginalL'auteur OscarRyz