-1

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

感谢您的帮助!

4

1 回答 1

6

没有深入了解导致 ConcurrentModificationException 的确切原因。您仍在从中删除每个对象frameList

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

synchronized (frameList) {
    for (JFrame frame : frameList) {
        if (frame instanceof EditorFrame) ((EditorFrame) frame).close();
        else frame.dispose();
    }
    frameList.clear();
}
于 2012-01-27T01:26:24.820 回答