每次我的观察员被遍历时,我都会收到此错误。
@Override
public void notifyObservers(ModelViewInterface model) {
for(Observer<ModelViewInterface> o : this.observers)
o.notify(model);
}
GWT没有线程,因此不是同步问题。
似乎在我按下按钮之后发生了任何关于如何避免此错误的想法?
答案 0 :(得分:10)
来自ConcurrentModificationException的javadoc:
请注意,此异常并不总是表示某个对象已被不同的线程同时修改。如果单个线程发出违反对象合同的一系列方法调用,则该对象可能会抛出此异常。例如,如果线程在使用失败快速迭代器迭代集合时直接修改集合,则迭代器将抛出此异常。
因此,在您的情况下,似乎o.notify(model)
直接或间接地修改了this.observers
。这是修改您正在迭代的集合时的常见现象。
为了避免并发修改,您可以对集合的副本进行操作,如下所示:
for(Observer<ModelViewInterface> o :
new ArrayList<ModelViewInterface>(this.observers)) {
o.notify(model);
}
但是,有时这不是您想要的 - o.notify
的当前行为也可能表示存在错误。