سؤال

ويسبب هذا الرمز استثناء مؤشر فارغة. ليس لدي أي فكرة عن السبب:

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 هو من مجموعات جوجل.

هل كانت مفيدة؟

المحلول

والاستثناء لاغية المؤشر هو نتيجة علبته نتيجة inverse.get(animal). إذا لم inverse تحتوي على animal مفتاح، فإنها ترجع null "من نوع" Integer. وبالنظر إلى أن التعيين هو إشارة int، جافا unboxes قيمة إلى int، مما أدى إلى استثناء مؤشر فارغة.

ويجب عليك إما تحقق من inverse.containsKey(animal) أو استخدام Integer كنوع المتغير المحلي لتجنب علبته والتصرف وفقا لذلك. الآلية المناسبة يعتمد على السياق الخاص بك.

نصائح أخرى

والتحقق من وجود inverse.containsKey(animal), BiMap<PhylogenyTree, Integer>. معكوس قد لا يكون الحيوان.

ويجب أن يكون لديك تتبع مكدس الذاكرة المؤقتة. وتقول بالضبط ما كان السطر حيث حدث ذلك. بعد ذلك ويمكننا ان نقول.

ومن كافة التعليمات البرمجية نشرها، ويمكنني أن "تخمين" واحدة من هذه هي NullPointerException المحتملين (NPE).

قد يكون node لاغية وتدعو node.getParent.

ويمكن أن تكون الأم والعقدة لاغيا والاحتجاج parent.getChildren قد بطرح NPE.

واحدة من الأشقاء قد يكون لاغيا والاحتجاج sibling.equals قد رمي NPE.

قد يكون cellInfo اغيا وسوف cellInfo.inverse رميها.

وأخيرا "معكوس" عاد قد يكون لاغيا وسوف inverse.get() رميها.

وتفو !! ...

وهكذا، لتجنب القيام بذلك guessings البرية، لماذا لا مجرد وظيفة تتبع مكدس الذاكرة المؤقتة ونكتشف؟

ووينبغي شيء من هذا القبيل:

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

والخ ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top