Java - ConcurrentModificationException

时间:2012-01-27 00:15:58

标签: java concurrentmodification

以下代码几乎每次调用时都会引发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();
    }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

没有确切地了解导致ConcurrentModificationException的原因。你还在移除frameList

中的每个对象

为什么不在完成列表迭代后明确清除列表。

synchronized (frameList) {
    for (JFrame frame : frameList) {
        if (frame instanceof EditorFrame) ((EditorFrame) frame).close();
        else frame.dispose();
    }
    frameList.clear();
}