के लिए उपयोग करते समय लिंक्डलिस्ट में नलपोइंटर अपवाद मैं बहुत अजीब जावा व्यवहार में आया, और मुझे नहीं पता कि यह एक बग है, या क्या मुझे कुछ याद आ रहा है।प्रत्येक लूप
कोड बस स्टेटस्टैक (लिंक्डलिस्ट) सूची के माध्यम से जाता है और सभी राज्यों को नष्ट कर देता है।
public void clearStates()
{
LogFactory.getLog(StateController.class.getName())
.info("Clearing states. #ofstates="+stateStack.size());
for (State state : stateStack) // Line 132 (see exception)
{
state.destroy();
}
// ...
}
निम्न अपवाद trowed गया था:
INFO controllers.StateController : Clearing states. #ofstates=1
java.lang.NullPointerException\
at java.util.LinkedList$ListItr.next(LinkedList.java:891)
at *.controllers.StateController.clearStates(StateController.java:132)
// ... //
इस कोड को आमतौर पर एक समस्या के बिना काम करता है और एक वर्ष से अधिक के लिए उत्पादन में किया गया है।
क्या यह संभव है कि यह जावा बग है?
/* अद्यतन */
नष्ट() कॉल stateStack संशोधित नहीं करता है। अगर मुझे लगता है कि जावा को ConcurrentModificationException फेंक देगा।
स्टेटस्टैक 1 राज्य के साथ पॉप्युलेट किया गया था, जो नष्ट हो जाता है, लेकिन केवल स्थानीय संशोधन करता है। अतिरिक्त लॉग प्रिंट ("राज्य को नष्ट कर रहा है ...") से सुपर कार्यान्वयन, जो कि लॉग फ़ाइल में नहीं था, इसलिए मुझे लगता है कि अपवाद को पर पुनरावृत्ति की शुरुआत में फेंक दिया गया था।
public void destroy()
{
destroyed = true;
LogFactory.getLog(State.class.getName()).info("Destorying state : "+getClass().getName());
propertyChangeSupport.firePropertyChange(PROP_DESTROYED, null, this);
}
लाइन '132' कहां है? शायद आपकी सूची में 'स्थिति' 'शून्य 'है? – Manuel
आप स्टेटस्टैक कैसे और कहां प्राप्त करते हैं? – arjacsoh
'state.destroy()' का कार्यान्वयन क्या है। यह क्या करता है? साथ ही, 'स्टेटस्टैक' कैसे आबादी है? – mthmulders