3

私はそのようなコードを持っています:

final SwingWorker worker = new SwingWorker() { 
      @Override
      protected Object doInBackground() throws Exception {...};
}
Timer timer=new Timer(10000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            worker.execute(); 
        }
    });
    timer.start();

ワーカープロシージャには 10 秒以上かかることもあれば、3 ~ 4 秒かかることあります。助言がありますか?

4

1 に答える 1

4

SwingWorkerクラスの javadoc を参照してください。

ワーカー スレッドで doInBackground メソッドが呼び出される前に、SwingWorker はすべての PropertyChangeListeners に状態プロパティが StateValue.STARTED に変更されたことを通知します。doInBackground メソッドが終了すると、done メソッドが実行されます。次に、SwingWorker は、状態プロパティが StateValue.DONE に変更されたことをすべての PropertyChangeListeners に通知します。

そのため、完了時にイベントが発生しSwingWorkerます。リスナーをアタッチTimerし、正しいイベントで再度アクティブにします。

于 2012-09-27T11:20:05.543 に答える