Pergunta

Este código está causando uma exceção de ponteiro nulo. Eu não tenho idéia por que:

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

Eu examinei-lo no depurador, e todas as variáveis ??locais são não-nulo. Como mais poderia estar acontecendo? O bitmap é do Google Collections.

Foi útil?

Solução

A exceção de ponteiro nulo é um resultado de unboxing o resultado de inverse.get(animal). Se inverse não contém o animal chave, ele retorna null, "do tipo" Integer. Dado que a atribuição é uma referência int, Java unboxes o valor em um int, resultando em uma exceção de ponteiro nulo.

Você deve ou verificar se há inverse.containsKey(animal) ou utilização Integer como o tipo de variável local para evitar unboxing e agir em conformidade. O mecanismo adequado depende do seu contexto.

Outras dicas

Verificar inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. O inverso pode não ter o animal.

Você deve ter um stacktrace. Ele diz exatamente o que foi a linha onde isso aconteceu. Postá-lo e podemos dizer.

De todo o código postado, eu posso "adivinhar" um destes são um NullPointerException potencial (NPE).

node pode ser nulo e node.getParent chamando.

pai do nó pode ser nulo e invocando parent.getChildren pode lançar uma NPE.

Um dos irmãos podem ser nulo e invocando sibling.equals pode lançar uma NPE.

cellInfo pode ser nulo e cellInfo.inverse vai jogá-lo.

Finalmente, o "inverso" retornado pode ser nulo e inverse.get() vai jogá-lo.

Ufa !! ...

Assim, para evitar fazer isso guessings selvagens, por que você não basta postar seu stacktrace e descobrimos?

Deve algo como:

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

etc ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top