백그라운드에서 무언가를 실행하기 위해 SwingWorker를 사용하고 있습니다. 실행 중에 나는 JoptionPane.showOptionDialog()를 던져 사용자에게 무엇인가를 물어볼 필요가있는 조건을 가지고있다. 내 모델 클래스에서이 작업을 수행하고 싶지 않으며 SwingWorker.doInBackground가 실행될 때이 작업을 수행하지 않습니다.SwingWorker doInBackground가 실행될 때 사용자 입력
많은 사람들이이 문제에 직면했을 것으로 확신합니다.
그래서 doInBackground에 대한 호출에서 돌아와 done()에서 사용자 입력을 요청해야합니다. 그런 다음 다른 SwingWorker를 시작하고 done 메소드에서 doInBackground()를 실행해야합니까?
이렇게하는 또 다른 간단하고 간단한 방법이 있습니까? (mkorbel의 질문에 대한)
업데이트
클래스 설계는 다음과 같이이다 :
public class OptionInSwingWorker {
public static void main(String[] args) {
JFrame frame=new JFrame();
JButton test = new JButton("Test");
frame.add(test);
test.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SwingWorker<Void,Void>(){
@Override
protected Void doInBackground() throws Exception {
// check for a value in the database
// if value is something.. throw up an OptionPane
// and ask the user a question..
// then do something...
return null;
}
@Override
protected void done() {
// open some other dialog
}
}.execute();
}
});
}
}
이전에는 작업 스레드의 Window 및 진행중인 메서드에 대한 참조를 전달하는 데 JOption을 호출하는 데 사용되었습니다. 그러나 좋은 생각이 아닙니다. 제대로 처리되지 않으면 많은 팝업으로 끝날 것입니다. 일부 기본 값으로 조인을 닫으려면 시간 제한을 사용하십시오 –
실행하는 동안 ..., 중첩 된 void 또는 SwingWorker에서 실행하는 클래스의 예외에 대해 이야기하고 있습니다. – mKorbel