質問

このコードは、nullポインター例外を引き起こしています。理由がわかりません:

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、<!> quot; of type <!> quot;を返します。 Integer。割り当てがint参照に対するものであることを考えると、Javaは値をinverse.containsKey(animal)に展開し、NULLポインター例外が発生します。

<=>をチェックするか、ローカル変数タイプとして<=>を使用して、ボックス化解除を回避し、それに応じて動作する必要があります。適切なメカニズムはコンテキストに依存します。

他のヒント

inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>を確認します。逆は動物がいないかもしれません。

スタックトレースが必要です。それはまさにそれが起こった行でした。投稿してください。

投稿されたすべてのコードから、<!> quot; guess <!> quot;これらの1つは、潜在的なNullPointerException(NPE)です。

nodeはnullで、node.getParentを呼び出す場合があります。

ノードの親がnullの可能性があり、parent.getChildrenを呼び出すとNPEがスローされる場合があります。

兄弟の1つがnullであり、sibling.equalsを呼び出すとNPEがスローされる場合があります。

cellInfoはnullの場合があり、cellInfo.inverseはそれをスローします。

最後に<!> quot; inverse <!> quot; nullが返される場合があり、inverse.get()がスローします。

Phew !! ...

だから、このワイルドな推測を避けるために、スタックトレースを投稿してみてください。

次のようになります:

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

etc ..。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top