Domanda

Questo codice sta causando un'eccezione puntatore null. Non ho idea del perché:

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

L'ho esaminato nel debugger e tutte le variabili locali sono non nulle. In quale altro modo potrebbe accadere? La BiMap proviene da Google Collections.

È stato utile?

Soluzione

L'eccezione del puntatore null è il risultato della decompressione del risultato di inverse.get(animal). Se inverse non contiene la chiave animal, restituisce null, & Quot; di tipo & Quot; Integer. Dato che l'assegnazione è a un int riferimento, Java decomprime il valore in un inverse.containsKey(animal), risultando in un'eccezione puntatore null.

Dovresti controllare <=> o usare <=> come tipo di variabile locale per evitare unboxing e agire di conseguenza. Il meccanismo corretto dipende dal tuo contesto.

Altri suggerimenti

Cerca inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. L'inverso potrebbe non avere l'animale.

Devi avere uno stacktrace. Dice esattamente qual era la linea in cui è successo. Pubblicalo e possiamo dirlo.

Da tutto il codice pubblicato, posso " indovinare " uno di questi è un potenziale NullPointerException (NPE).

node può essere nullo e chiamare node.getParent.

Il genitore del nodo può essere nullo e invocare parent.getChildren può generare un NPE.

Uno dei fratelli potrebbe essere nullo e invocare sibling.equals potrebbe lanciare un NPE.

cellInfo potrebbe essere nullo e cellInfo.inverse lo lancerà.

Finalmente " inverse " il reso potrebbe essere nullo e inverse.get() lo lancerà.

Accidenti !! ...

Quindi, per evitare di fare queste ipotesi selvagge, perché non pubblichi semplicemente la tua stack stack e lo scopriamo?

Dovrebbe essere qualcosa del tipo:

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

ecc..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top