バックグラウンドで何かを実行するために SwingWorker を使用しています。実行中に、JoptionPane.showOptionDialog() をスローしてユーザーに何かを尋ねる必要がある状況があります。モデル クラスでこれを実行したくありません。また、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();
}
});
}
}