Следующий фрагмент кода генерирует исключение 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();
}
}
Спасибо за помощь!