मैं मेरी कक्षा में एक मानचित्र उद्देश्य यह है कि मैं बहुत की तरह एक LinkedHashMap के लिए Collections.synchronizedMap() के साथ समन्वयित किया है उपयोग कर रहा हूँ इस समारोह की तीसरी लाइन पर एक समवर्ती संशोधन अपवाद हो रही:ConcurrentModificationException भी एक LinkedHashMap पर Collections.sychronizedMap उपयोग करने के साथ
public static void frameElapsed(float msElapsed){
if(!INSTANCE.gameObjects.isEmpty()){
synchronized(INSTANCE.gameObjects){
for(GameObject object : INSTANCE.gameObjects.values()){...}
}
}
}
अन्य सभी स्थान जहाँ मैं मानचित्र के माध्यम से पुनरावृत्ति हूँ, मैं डॉक्स प्रति नक्शे पर सिंक्रनाइज़ कर रहा हूँ।
मेरी कक्षा में अन्य फ़ंक्शन हैं जो इस मानचित्र (सिंक्रनाइज़ किए गए एक!) का उपयोग करते हैं और वे ऑब्जेक्ट डालते हैं() और हटाते हैं() ऑब्जेक्ट्स, लेकिन इससे कोई फर्क नहीं पड़ता। मैं क्या गलत कर रहा हूं? कृपया अधिक कोड मांगें, सुनिश्चित न करें कि और क्या रखा जाए।
ओह, और लॉग संदेश:
08-20 15:55:30.109: E/AndroidRuntime(14482): FATAL EXCEPTION: GLThread 1748
08-20 15:55:30.109: E/AndroidRuntime(14482): java.util.ConcurrentModificationException
08-20 15:55:30.109: E/AndroidRuntime(14482): at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:350)
08-20 15:55:30.109: E/AndroidRuntime(14482): at java.util.LinkedHashMap$ValueIterator.next(LinkedHashMap.java:374)
08-20 15:55:30.109: E/AndroidRuntime(14482): at package.GameObjectManager.frameElapsed(GameObjectManager.java:247)
08-20 15:55:30.109: E/AndroidRuntime(14482): at package.GamekitInterface.render(Native Method)
08-20 15:55:30.109: E/AndroidRuntime(14482): at package.GamekitInterface.renderFrame(GamekitInterface.java:332)
08-20 15:55:30.109: E/AndroidRuntime(14482): at com.qualcomm.QCARSamples.ImageTargets.GameEngineInterface.onDrawFrame(GameEngineInterface.java:107)
08-20 15:55:30.109: E/AndroidRuntime(14482): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1516)
08-20 15:55:30.109: E/AndroidRuntime(14482): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
आप ** gameObjects ** जो कुछ कार्यों का उपयोग का उपयोग करना चाहिए अगर आप दो बार GameObjectManager() कहते हैं; पहले gameObjects और दूसरा gameObjects एक ही वस्तु नहीं हैं, इसलिए ConcurrentModificationException –
कारण मुझे समझ नहीं आता कि तुम क्या कहा सकता है। लेकिन मैंने नोटिस किया कि मुझे सिंक्रनाइज़ करने के बाद ऐसा करना चाहिए। क्या तुमने यही कहा? – mpellegr