napisałem sobie taki oto fragment, w celu pozamykania wszystkich okienek
//CloseFrame extends JFrame implements Closable
Iterator<ClosableFrame> iterator = xset.iterator();
while(iterator.hasNext()) {
ClosableFrame frame = iterator.next();
frame.close();
frame.dispose();
}
ale niestety, przy dwóch okienkach w xsecie, program się wysypuje następująco:
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at ... i dalej jest wskazanie na miejsce w kodzie: ClosableFrame frame = iterator.next();
oczywiście najpierw zrobiłem tak:
Iterator<ClosableFrame> iterator = xset.iterator();
while(iterator.hasNext()) {
final ClosableFrame frame = iterator.next();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.close();
frame.dispose();
}
});
}
program się nie wysypuje, no ale dalej nie mam pewności, że się nic nie wysypie później (np. przy większej ilości okienek)
((bo przecież przetwarzanie kolejki swinga może się skończyć wcześniej niż pociągnięcie z iteratora -> i tak z pewnością się może stać!!))
Co więc powinienem zrobić...
Z góry dzięki za pomoc.
(Aha, żeby uniknąć nieporozumień cały kod - ten zewnętrzny, tak czy inaczej jest wykonywany w wątku swinga (przez invokeLater Klasy SwingUtyliteis) - to tak na wszelki wypadek)
karolex
Z góry dzięki za pomoc