2

私は次のコードを持っています...

runNow.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {

    final Search s = (Search) node.getUserObject();

    // Swing worker
    SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
        @Override
        public Void doInBackground() {
            s.run();
            return null;
        }

        @Override
        public void done() {
            window.updateResultsPanel(s.getResults(), s.getName());
         }
    };

    worker.run();

    }
});

これはポップアップメニューアクションであり、新しいSwingWorkerを作成し、GUIを解放し、いくつかの作業を行ってから、ウィンドウの結果を更新する必要があります。ただし、現在、メニュー項目をクリックすると、作業が完了するまでGUIがロックされ、困惑します。SwingWorkerを使用することの全体的なポイントは、それが起こらないようにすることです。

私が間違っていることについてのアイデアは大歓迎です。

-コーディ

4

2 に答える 2

4

SwingWorker#executeあなたは労働者を始めるために電話するべきであり、run

RunはRunnableインターフェースによって公開されますが、executeは実際には、将来のある時点でワーカーが実行されるようにスケジュールします。

于 2012-11-14T03:31:24.793 に答える
1

メソッドSwingWorker.run()をに変更する必要がSwingWorker.execute()あり、それは魅力のように機能しました。

于 2012-11-14T03:31:10.293 に答える