Java - ConcurrentModificationException - PullRequest
       5

Java - ConcurrentModificationException

0 голосов
/ 27 января 2012

Следующий фрагмент кода генерирует исключение 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 Ответ

6 голосов
/ 27 января 2012

Не вдаваясь точно в то, что вызывает исключение ConcurrentModificationException.вы все еще удаляете каждый объект из frameList

, почему бы вам не очистить список явно после того, как вы закончили итерацию списка.

...