2009-11-28 20 views
8

यह कोड एक शून्य सूचक अपवाद पैदा कर रहा है। मुझे पता नहीं क्यों है:जावा: इंटीजर अनबॉक्सिंग करते समय शून्य सूचक अपवाद?

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 संग्रह से है।

+5

ठीक है, उन्होंने उस अपवाद को शामिल किया था जिसमें अपवाद फेंक दिया गया था। मुझे नहीं लगता कि लाइन को इंगित करने के अलावा, इस मामले में NullPointerException stacktrace सहायक है – notnoop

उत्तर

35

शून्य सूचक अपवाद inverse.get(animal) के परिणाम को अनबॉक्स करने का परिणाम है। यदि inverse में animal कुंजी नहीं है, तो यह null, "प्रकार का प्रकार" Integer देता है। यह देखते हुए कि असाइनमेंट int संदर्भ के लिए है, जावा मान को int में अनबॉक्स करता है, जिसके परिणामस्वरूप शून्य सूचक अपवाद होता है।

आप या तो inverse.containsKey(animal) के लिए जाँच या स्थानीय चर प्रकार के रूप में Integer का उपयोग unboxing से बचने और उसके अनुसार कार्य करना चाहिए। उचित तंत्र आपके संदर्भ पर निर्भर करता है।

0

आपके पास एक स्टैकट्रैक होना चाहिए। यह कहता है कि वास्तव में क्या हुआ था। इसे पोस्ट करें और हम बता सकते हैं।

सभी पोस्ट कोड मैं "अनुमान" कर सकते हैं इनमें से किसी एक संभावित NullPointerException

नोड अशक्त हो सकता है और फोन करने node.getParent

नोड के माता-पिता अशक्त हो सकता है और लागू parent.getChildren फेंक सकता है एनपीई

हैं से

एक ओ भाई अशक्त हो सकता है और लागू sibling.equals फेंक सकता है एनपीई

cellInfo अशक्त हो सकता है और cellInfo.inverse फेंक होगा।

अंततः "उलटा" वापस शून्य हो सकता है और inverse.get() इसे फेंक देगा।

ओह !! ...

तो, यह जंगली guessings कारण है कि आप सिर्फ अपने स्टैकट्रेस पोस्ट न करें कर से बचने के लिए और हम पता चला?

यह चाहिए की तरह कुछ:

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

आदि ..।

3

inverse.containsKey (पशु) के लिए जाँच करें, BiMap उलटा जानवर नहीं हो सकता है।

संबंधित मुद्दे