سؤال

الجواب:

إذا كنت من أي وقت مضى نرى هذه الخطوط هي mistified مثل ما كان هذا ما تعنيه.

Thread[AWT-EventQueue-0] (Suspended (exception NullPointerException))

EventDispatchTread.run() line: not available [local variables unavailable]

انها ليست أن المتغيرات غير متوفرة لأنهم يختبئون خلف ستار من الغموض في مكتبة ما السحتن.لا أنها خرجت من نطاق!انها لا تزال خطأك, لا يزال لديك للعثور على باطل, و لا يمكنك إلقاء اللوم على المكتبة.المهم الدرس!

السؤال:

واحدة من أكثر الأمور المحبطة بالنسبة لي كمبتدئ هو المكتبات!إنها علاقة الحب/الكراهية:من جهة أنها اسمحوا لي أن تفعل الأشياء التي عادة لا أفهم كيف نفعل مع التعليمات البرمجية التي فهمت من ناحية أخرى لأنني لا أفهم تماما عليهم رمي في بعض الأحيان وجع في التعليمات البرمجية التي هي على خلاف ذلك على ما يرام!لأنني لا أفهم الأخطاء التي يمكن أن تحدث عند استخدام هذه المكتبات ، لأنني لم يكتب لهم ، لأن الكسوف لا يعطيني قدرا كبيرا الذهاب مع واحدة من الواردات يبدأ تتصرف...

لذا هنا تكمن المشكلة:لقد تم العمل مع جافا.awt.الحدث للتعامل مع مجموعة من JButtons على الشاشة لهذا.أحصل على خطأ عند استخدام أحد الأزرار التي قمت بهاالخطأ هو:

Thread[AWT-EventQueue-0] (Suspended (exception NullPointerException))

EventDispatchTread.run() line: not available [local variables unavailable]

ماذا يعني هذا ؟ ما يمكن أن يسبب هذا ؟ أنا محرجة إلى رمز آخر ، ولكن إذا كنت يمكن أن يقف في محاولة فك الرهيبة نمط هنا هو الطريقة التي يبدو أن سبب هذا الخطأ أن يتم طرح.

public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand();
    String name;

code...

if(cmd.equals("Play")) {
        name = field.getText();
        card = getCard(name);

        if(card != null) {
            if(rules.zoneHasCard(card, rules.hand)) {
                display.updateStatusMessage(rules.play(card));
                field.setText("");
                display.updateHand(rules.zoneList("hand"));
                display.updateDiscard(rules.zoneList("Discard")); // This is the error here! The discard Zone was empty!
            }
            else {
                field.setText("You do not have " + card.getName());
                field.selectAll();
            }
        }
        else {
            field.setText("That cardname is unused");
            field.selectAll();
        }
    }
}
هل كانت مفيدة؟

المحلول

مرحبا بكم في تعقيد كتابة رمز واجهة المستخدم الرسومية.

عند تشغيل البرنامج البديل, مؤشر ترابط خلفية ما يسمى إرسال الحدث موضوع يتم إنشاؤه.عندما ينقر المستخدم على JButton ، على سبيل المثال ، JButton يخلق الحرائق الحدث باستخدام هذا الحدث إرسال الموضوع.ومن هنا جاء اسم:إنه الخيط الذي يرسل الأحداث!

الكود الخاص بك:

public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        String name;

// more code...
}

ويسمى هذا الحدث إرسال الموضوع ، لذلك الرمز الخاص بك يمكن التعامل مع الحدث.

في مكان ما داخل التعليمات البرمجية الخاصة بك كنت تحاول أن تفعل شيئا مع متغير حاليا يساوي null.رسالة الخطأ تقول "مرحبا أثناء تشغيل بعض التعليمات البرمجية في الحدث إرسال الموضوع ، واجهت NullPointerException" في التعليمات البرمجية الخاصة بك.

لماذا لا تلقي المزيد من المعلومات ؟ ربما يمكنك تكوين الكسوف لا تشمل معلومات التصحيح عند ترجمة ؟

الآن أنا ننصح بإضافة بعض الخطوط الخاصة بك actionPerformed طريقة لإظهار حالة من المتغيرات:

System.out.println("field = " + field);
System.out.println("rules = " + rules);
System.out.println("display = " + display);

ترى إذا كان هذا يظهر لك أي بالقيم الخالية.

حتى لو كان NullPointerException يأتي من مكتبة تتبع المكدس سوف تظهر أي سطر من التعليمات البرمجية الخاصة بك يسمى المكتبة.ولكن فقط إذا كنت قد قمت بتكوين الكسوف لتوليد معلومات التصحيح.

في المدى الطويل ، العمل من خلال الشمس البديل التعليمي لمعرفة المزيد عن هذه القضايا.

نصائح أخرى

وأي استدعاء الأسلوب على لاغية وجوه سترفع استثناء مؤشر فارغة.

في التعليمات البرمجية، <ط> قواعد، اسم أو عرض يمكن أن يكون لاغيا وتسبب استثناء.

استخدم مصحح (مثل واحد المدرجة في الكسوف IDE) وتعيين نقطة توقف في بداية طريقة actionPerformed ()، ثم خطوة من خلال ذلك سطرا سطرا لمعرفة متى متغير محاولة استدعاء أسلوب على لاغيا.

وفقط لا تتوقف القراءة تتبع المكدس بعد سطرين. في مكان ما في تتبع المكدس سوف تتعرف على اسم واحد من فصول / الأساليب التي فعلت الكتابة. تبدأ في النظر هناك. (راجع للشغل، والناس يقضون وسيلة لمصححات داخل الكثير من الوقت: -))

وربما تكون قد نسيت لتحديد الواقع ActionCommand.

ActionEvent API الوثيقة هناك مذكرة بشأن نتائج فارغة ممكن من getActionCommand ().

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