Chcę nadzorować aplikację w Swingu z wątku głównego. Mam zamiar wpływać z wątku głównego na okienko
Swingowe, następnie czekać aż użytkownik je wypełni oraz zatwierdzi przyciskiem, a kiedy to nastąpi znowu ingerować w nie z wątku głównego. Na razie osiągnąłem ten efekt w ten sposób:
public void testTestingDialog(){
...
blocker = new SwingBlocker();
dialog.addActionListener(blocker);
...
String answer;
dialog.setQuery("Kapelusz");
waitForEvent();
answer = dialog.getAnswer();
System.out.println(answer);
dialog.setQuery("Marynarka");
waitForEvent();
answer = dialog.getAnswer();
System.out.println(answer);
}
private void waitForEvent(){
blocked = true;
while(blocked){
try{Thread.sleep(100);}catch(InterruptedException e){}
}
}
private static class SwingBlocker implements ActionListener{
@Override public void actionPerformed(ActionEvent arg0) {
blocked = false;
}
}
Jednak nie wiem, czy jest to dobry sposób na ogsługę wątków w Swingu. Czy da się to zrobić w jakiś lepszy lub bardziej elegancki sposób?