Question

Ce code provoque une exception de pointeur null. Je ne sais pas 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);
        }
    }
}

Je l'ai examiné dans le débogueur et toutes les variables locales sont non nulles. Sinon, comment cela pourrait-il se passer? La BiMap provient de Google Collections.

Était-ce utile?

La solution

L'exception de pointeur nul est le résultat de la déconnexion du résultat de inverse.get(animal). Si inverse ne contient pas la clé animal, il renvoie null, & Quot de type & Quot; Integer Étant donné que l’attribution est faite à une référence int, Java décompresse la valeur dans un inverse.containsKey(animal), ce qui entraîne une exception de pointeur null.

Vous devez rechercher <=> ou utiliser <=> comme type de variable locale pour éviter le déballage et agir en conséquence. Le mécanisme approprié dépend de votre contexte.

Autres conseils

Recherchez inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. L'inverse pourrait ne pas avoir l'animal.

Vous devez avoir un stacktrace. Cela indique exactement quelle était la limite où cela s'est passé. Affichez-le et nous pouvons le dire.

De tout le code posté, je peux & "deviner &"; l’un d’eux est une exception NullPointerException (NPE) potentielle.

node peut être nul et appeler node.getParent.

Le parent du noeud peut être nul et appeler parent.getChildren peut générer un NPE.

L'un des frères et soeurs peut être nul et invoquer sibling.equals peut générer un NPE.

cellInfo peut être nul et cellInfo.inverse le jettera.

Enfin le " inverse " retourné peut être nul et inverse.get() le jettera.

Ouf !! ...

Alors, pour éviter de faire de telles suppositions, pourquoi ne postez-vous pas simplement votre pile et nous le découvrirons?

Il devrait ressembler à quelque chose comme:

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

etc ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top