每次观察者遍历时,我都会收到此错误.
@Override
public void notifyObservers(ModelViewInterface model) {
for(Observer<ModelViewInterface> o : this.observers)
o.notify(model);
}
Run Code Online (Sandbox Code Playgroud)
GWT没有线程,因此它不是同步问题.
这似乎发生在我按下按钮之后,有关如何避免此错误的任何想法?
Chr*_*her 10
从ConcurrentModificationException的javadoc :
请注意,此异常并不总是表示某个对象已被另一个线程同时修改.如果单个线程发出违反对象合同的一系列方法调用,则该对象可能会抛出此异常.例如,如果线程在使用失败快速迭代器迭代集合时直接修改集合,则迭代器将抛出此异常.
所以在你的情况下,它似乎直接或间接地o.notify(model)修改this.observers.这是修改您正在迭代的集合时的常见现象.
为避免并发修改,您可以对集合的副本进行操作,如下所示:
for(Observer<ModelViewInterface> o :
new ArrayList<ModelViewInterface>(this.observers)) {
o.notify(model);
}
Run Code Online (Sandbox Code Playgroud)
但是,有时候这不是你想要的 - 当前的行为也o.notify可能表明存在错误.
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |