以下代码几乎每次调用时都会引发ConcurrentModificationException。第二段代码不会抛出异常,但它不是我需要的正确逻辑。如果对象是EditorFrame
的实例,我需要调用close()
方法的自定义处理策略。但是,如果它只是一个基本框架,我希望它调用dispose()
。
我已经浏览了这个网站并遵循了一些指示,但我找不到任何指示。
抛出异常的代码:
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();
}
}
感谢您的帮助!
答案 0 :(得分:6)
没有确切地了解导致ConcurrentModificationException的原因。你还在移除frameList
为什么不在完成列表迭代后明确清除列表。
synchronized (frameList) {
for (JFrame frame : frameList) {
if (frame instanceof EditorFrame) ((EditorFrame) frame).close();
else frame.dispose();
}
frameList.clear();
}