并发修改异常:向ArrayList添加这个问题发生在Element element = it.next();包含该行的代码位于OnTouchEventfor (Iterator<Element> it = mElements.iterator(); it.hasNext();){
Element element = it.next();
if(touchX > element.mX && touchX < element.mX + element.mBitmap.getWidth() && touchY > element.mY
&& touchY < element.mY + element.mBitmap.getHeight()) {
//irrelevant stuff..
if(element.cFlag){
mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
element.cFlag = false;
}
}
}所有这些都在里面synchronized(mElements),在哪里mElements是ArrayList<Element>当我触摸Element,它可能会激活cFlag,这将产生另一个Element有着不同的属性,这些属性会在不到一秒钟的时间内从屏幕上掉下来并摧毁自己。这是我创造粒子效应的方法。我们可以称之为“粒子”crack,类似于构造函数中的字符串参数。在我添加另一个main之前,所有这些都可以正常工作。Element..现在我有两个Elements同时在屏幕上,如果我触摸最新的Element它工作得很好,并发射粒子。但是,如果我触摸并激活cFlag老一点Element它给了我一个例外。
3 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
ConcurrentModificationExceptionIterator
.
List<Element> thingsToBeAdd = new ArrayList<Element>(); for(Iterator<Element> it = mElements.iterator(); it.hasNext();) { Element element = it.next(); if(...) { //irrelevant stuff.. if(element.cFlag){ // mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY)); thingsToBeAdd.add(new Element("crack",getResources(), (int)touchX,(int)touchY)); element.cFlag = false; } } } mElements.addAll(thingsToBeAdd );
慕运维8079593
TA贡献1876条经验 获得超5个赞
for (Element element : new ArrayList<Element>(mElements)) { ... }
添加回答
举报
0/150
提交
取消