문제

이 코드는 널 포인터 예외를 유발합니다. 왜 그런지 모르겠습니다.

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

디버거에서 검사했으며 모든 로컬 변수는 무감각합니다. 이런 일이 어떻게 일어날 수 있습니까? BIMAP는 Google 컬렉션에서 나온 것입니다.

도움이 되었습니까?

해결책

Null 포인터 예외는 결과를 무너 뜨린 결과입니다. inverse.get(animal). 만약에 inverse 키가 포함되어 있지 않습니다 animal, 그것은 돌아옵니다 null, "유형" Integer. 과제가 int 참조, Java Unbox는 값을 안에 넣습니다 int, 널 포인터 예외를 초래합니다.

확인해야합니다 inverse.containsKey(animal) 또는 사용 Integer Unboxing을 피하고 그에 따라 행동하는 로컬 변수 유형으로. 적절한 메커니즘은 상황에 따라 다릅니다.

다른 팁

확인하십시오 inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. 역에는 동물이 없을 수도 있습니다.

스택 트레이스가 있어야합니다. 그것은 그 일이 일어난 선이 무엇인지 정확히 말합니다. 그것을 게시하면 우리는 말할 수 있습니다.

게시 된 모든 코드에서,이 중 하나는 잠재적 인 NullPointerException (NPE)입니다.

node 무효가 될 수 있습니다 node.getParent.

노드의 부모가 무효화되어 호출 될 수 있습니다 parent.getChildren NPE를 던질 수 있습니다.

형제 자매 중 하나는 무효가되어 호출 될 수 있습니다 sibling.equals NPE를 던질 수 있습니다.

CellInfo는 null 일 수 있습니다 cellInfo.inverse 던질 것입니다.

마지막으로 반환 된 "반대"는 무일한 일 수 있고 inverse.get() 던질 것입니다.

휴 !! ...

그렇다면이 거친 추측을 피하기 위해 스택 트레이스를 게시하지 않으면 우리가 알게되는 이유는 무엇입니까?

그것은 다음과 같아야합니다.

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

등.. .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top