Java:исключение нулевого указателя при распаковке целого числа?

StackOverflow https://stackoverflow.com/questions/1811706

Вопрос

Этот код вызывает исключение с нулевым указателем.Я понятия не имею, почему:

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

Я проверил это в отладчике, и все локальные переменные не равны нулю.Как еще это могло произойти?БиМап взят из коллекций Google.

Это было полезно?

Решение

Исключение пустого указателя является результатом распаковки результата inverse.get(animal). Если inverse не содержит ключа animal, он возвращает null, & Quot; типа & Quot; Integer. Учитывая, что присвоение относится к ссылке int, Java распаковывает значение в inverse.containsKey(animal), что приводит к исключению нулевого указателя.

Вы должны либо проверить <=>, либо использовать <=> в качестве типа локальной переменной, чтобы избежать распаковки и действовать соответствующим образом. Правильный механизм зависит от вашего контекста.

Другие советы

Проверьте на наличие inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. Обратное может не иметь животных.

У вас должна быть трассировка стека.Там точно сказано, что это была за линия, где это произошло.Опубликуйте это, и мы сможем рассказать.

Из всего опубликованного кода я могу "догадаться", что одно из них является потенциальным NullPointerException (NPE).

node может быть нулевым и вызывающим node.getParent.

Родительский узел может иметь значение null и вызывать parent.getChildren может выдать NPE.

Один из братьев и сестер может быть нулевым и вызывать sibling.equals может выдать NPE.

cellInfo может быть нулевым и cellInfo.inverse выброшу его.

Наконец, возвращаемое "обратное" значение может быть нулевым и inverse.get() выброшу его.

Фух!!...

Итак, чтобы избежать этих диких догадок, почему бы вам просто не опубликовать свой stacktrace, и мы узнаем?

Это должно быть что-то вроде:

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

и т.д...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top