-1
以下几段代码几乎每次调用时都会引发ConcurrentModificationException。第二段代码不会抛出异常,但它不是我需要的正确逻辑。如果对象是EditorFrame
的实例,则需要调用自定义处置策略,这是close()
方法的作用。但是,如果它只是一个基本框架,我希望它叫dispose()
。Java - ConcurrentModificationException
我环顾了这个网站,并按照一些说明,但没有发现我的工作。
抛出异常的代码:
synchronized (frameList) {
for (Iterator<JFrame> it = frameList.iterator(); it.hasNext();) {
JFrame frame = it.next();
if (frame instanceof EditorFrame) ((EditorFrame) frame).close();
else frame.dispose();
it.remove();
}
}
此代码的工作,但它不是我想要的东西:
synchronized (frameList) {
for (Iterator<JFrame> it = frameList.iterator(); it.hasNext();) {
JFrame frame = it.next();
frame.dispose();
it.remove();
}
}
感谢您的帮助!
您是否在'EditorFrame.close'方法修改'frameList'? (当前线程将锁定'frameList',锁是可重入的,不应该需要锁,因为Swing只能用于事件调度线程(EDT)。) – 2012-01-27 00:19:22
您可以发布EditorFrame类吗? – 2012-01-27 00:24:33
同意Tom Hawtin:你应该只在单线程EDT上执行此代码,所以不应该需要同步。哪条线通过这种方式抛出异常?此外,所有if/else块,for循环,拍摄任何代码块都应该用大括号括起来以避免模糊。 – 2012-01-27 00:43:15