3

開始ボタンと停止ボタンがあります。SwingWorkerを使用する必要があると言われました。私が今持っているコードはうまく機能します。私はそれを開始し、それを停止します。しかし、もう一度やり直したい場合はどうすればよいですか。doinBackgroundメソッドは1回だけ実行されることを読んでいます。もう一度発射する方法はありますか..??

現在、Swing Workerの新しいインスタンスを作成できません。これは、Swing Workerにwhile(isSet)というwhileループがあり、スタートボタンをクリックするとTrueに設定され、停止をクリックするとFalseに設定されるためです。ボタン。

これを回避する方法はありますか..??

ありがとう

4

3 に答える 3

7

SwingWorker API doc はあなたの質問に答えます:

SwingWorker は、一度だけ実行されるように設計されています。SwingWorker を複数回実行しても、doInBackground メソッドが 2 回呼び出されることはありません。

SwingWorker API ドキュメント

開始ボタンが押されるたびに、新しい SwingWorker インスタンスを作成する必要があります。

于 2010-07-16T15:41:44.160 に答える
1

私が提案するのは、オブジェクトに SwingWorker をカプセル化することです。「実行」ボタンが押されたら、そのオブジェクトに SwingWorker を作成させ、それを実行に移します。「停止」フラグが設定されている場合、SwingWorker はそれ自体を終了させ、カプセル化オブジェクトに終了したことを伝えます。「go」ボタンが再び押されると、カプセル化オブジェクトは新しい SwingWorker を作成します。

于 2010-07-16T16:39:25.210 に答える
0

あなたが言うように、各 SwingWorker は一度実行されるように設計されています。その点で、各オブジェクトは単一の実行を表します。

したがって、目的を達成するための有効な (そしておそらく最も簡単な) 方法の 1 つは、毎回アクションの別のインスタンスを実際に生成したい場合は、開始ボタンのクリックごとに新しい SwingWorker を作成することです。

于 2010-07-16T15:40:31.613 に答える