-1

次のコードは、呼び出されるたびにConcurrentModificationExceptionをスローします。2番目のコードは例外をスローしませんが、それは私が必要とする正しいロジックではありません。オブジェクトがのインスタンスである場合、メソッドが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 に答える