Frage

Dieser Code verursacht eine Null-Zeiger-Ausnahme. Ich habe keine Ahnung, warum:

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);
        }
    }
}

Ich habe es im Debugger untersucht, und alle lokalen Variablen sind nicht null. Wie sonst könnte dies geschehen? Die bimap ist von Google-Sammlungen.

War es hilfreich?

Lösung

Die Null-Zeiger-Ausnahme ist das Ergebnis des Ergebnis der inverse.get(animal) Unboxing. Wenn inverse enthält nicht den Schlüssel animal, gibt es null, „vom Typ“ Integer. Da die Zuordnung zu einer int Referenz, unboxes Java den Wert in einem int, in einem Null-Zeiger-Ausnahme führt.

Sie sollten entweder prüfen inverse.containsKey(animal) oder Integer als lokalen Variablentyp verwenden zu vermeiden Unboxing und entsprechend handeln. Der richtige Mechanismus hängt von Ihrem Kontext.

Andere Tipps

Nach inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. Die inverse vielleicht nicht das Tier hat.

Sie müssen einen Stacktrace haben. Es sagt genau das, was war die Linie, wo das passiert ist. Post-It und wir können sagen.

Von all dem entsandten Code, kann ich "erraten" eine davon ist eine mögliche Nullpointer (NPE).

node kann null und ruft node.getParent.

Die Eltern Knoten null sein kann und parent.getChildren Aufruf kann eine NPE werfen.

Eines der Geschwister null sein kann und sibling.equals Aufruf kann eine NPE werfen.

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

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

Puh !! ...

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

Es sollte so etwas wie:

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

etc ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top