Pregunta

Este código está causando una excepción de puntero nulo. No tengo idea de por qué:

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

Lo he examinado en el depurador, y todas las variables locales no son nulas. ¿De qué otra forma podría estar pasando esto? BiMap es de Google Collections.

¿Fue útil?

Solución

La excepción de puntero nulo es el resultado de desempaquetar el resultado de inverse.get(animal). Si inverse no contiene la clave animal, devuelve null, & Quot; de tipo & Quot; Integer. Dado que la asignación es a una referencia int, Java desempaqueta el valor en un inverse.containsKey(animal), lo que resulta en una excepción de puntero nulo.

Debe verificar <=> o usar <=> como el tipo de variable local para evitar el desempaquetado y actuar en consecuencia. El mecanismo adecuado depende de su contexto.

Otros consejos

Verifique inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. El inverso podría no tener el animal.

Debes tener un stacktrace. Dice exactamente cuál fue la línea donde sucedió eso. Publícalo y podemos verlo.

De todo el código publicado, puedo " adivinar " uno de estos es una potencial NullPointerException (NPE).

node puede ser nulo y llamar a node.getParent.

El padre del nodo puede ser nulo e invocar parent.getChildren puede arrojar un NPE.

Uno de los hermanos puede ser nulo e invocar sibling.equals puede arrojar un NPE.

cellInfo puede ser nulo y cellInfo.inverse lo arrojará.

Finalmente el " inverso " devuelto puede ser nulo y inverse.get() lo arrojará.

¡Uf! ...

Entonces, para evitar hacer estas suposiciones salvajes, ¿por qué no publicas tu stacktrace y lo descubrimos?

Debería ser algo como:

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

etc. ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top