2013-02-27 97 views
0

我正在使用android cocos2d中的游戏。Cocos2d游戏在android中使用java.util.ConcurrentModificationException异常崩溃

除了这次随机崩溃,每件事情都很好。

当我试图取代它给了我下面的异常的场面是相同的堆栈跟踪:

java.util.ConcurrentModificationException 

at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569) 

at org.cocos2d.nodes.CCNode.onEnter(CCNode.java:1351) 

at org.cocos2d.layers.CCLayer.onEnter(CCLayer.java:173) 

at org.cocos2d.nodes.CCNode.onEnter(CCNode.java:1352) 

at org.cocos2d.layers.CCLayer.onEnter(CCLayer.java:173) 

at org.cocos2d.nodes.CCNode.onEnter(CCNode.java:1352) 

at org.cocos2d.nodes.CCDirector.setNextScene(CCDirector.java:1238) 

at org.cocos2d.nodes.CCDirector.drawCCScene(CCDirector.java:705) 

at org.cocos2d.nodes.CCDirector.onDrawFrame(CCDirector.java:665) 

at org.cocos2d.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1245) 

at org.cocos2d.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1056) 

这里是我的代码替换场景:

CCDirector.sharedDirector().replaceScene(GameLayer.scene(activityContext,null)); 

它工作正常有一段时间,但一段时间后它崩溃,并再次开始工作正常,然后在一段时间后崩溃再次。

请给我建议一些解决办法。

回答

1

异常表示正在迭代列表时正在修改列表。鉴于调用堆栈,看起来Cocos正在迭代场景中的节点来绘制它们。在发生这种情况时,似乎正在添加或删除节点。

这可能是因为要修改的场景之一:

  1. 在绘图回调节点;或
  2. 从另一个线程(即不是OpenGL线程),因此与绘图赛跑。

检查在场景中添加或删除东西的位置,以确保它在绘图时不会发生,并且只能从正确的线程(或通过适当的同步)完成。