私はそうのようなのLinkedHashMapためCollections.synchronizedMap()と同期してきた私のクラスでのMapオブジェクトを使用していますこの関数の3行目に同時変更例外を取得:ConcurrentModificationExceptionがさえのLinkedHashMapにCollections.sychronizedMapを使用して
public static void frameElapsed(float msElapsed){
if(!INSTANCE.gameObjects.isEmpty()){
synchronized(INSTANCE.gameObjects){
for(GameObject object : INSTANCE.gameObjects.values()){...}
}
}
}
私は地図を反復処理しています他のすべての場所が、私はドキュメントごとに地図上同期しています。
私のクラスには、このマップ(同期されたもの)を使用し、オブジェクトをput()およびremove()する他の関数もありますが、これは問題ではありません。私は間違って何をしていますか?他に何を入れるべきかわからない、もっとコードを求めてください。
ああ、およびログメッセージ:
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()を2回呼び出す場合は を使用する必要があります。最初のgameObjectsと2番目のgameObjectsは同じオブジェクトではないため、ConcurrentModificationExceptionが発生することがあります –
あなたの言ったことを理解できません。しかし、同期した後、私はそれを行うべきであることに注意しました。それはあなたが言ったことですか? – mpellegr