2

バックグラウンドで何かを実行するために 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();
            }
        });

    }
}
4

1 に答える 1