シリアルポート接続を構成するSwingWorkerがあります。このプロセスは、完了するまでに不確定な時間がかかり、場合によっては1分、場合によってはそれ以上かかることもあります。
私の問題は、ワーカースレッドがまだ構成されているときに、ユーザーが構成データを必要とするボタンをクリックすると発生します。
ワーカースレッドが完了した場合にのみユーザーのリクエストを実行する方法を知りたいです。それ以外の場合、ワーカースレッドがまだ生きている場合は、ワーカースレッドが終了するまで実行を待機させます。
シリアルポート接続を構成するSwingWorkerがあります。このプロセスは、完了するまでに不確定な時間がかかり、場合によっては1分、場合によってはそれ以上かかることもあります。
私の問題は、ワーカースレッドがまだ構成されているときに、ユーザーが構成データを必要とするボタンをクリックすると発生します。
ワーカースレッドが完了した場合にのみユーザーのリクエストを実行する方法を知りたいです。それ以外の場合、ワーカースレッドがまだ生きている場合は、ワーカースレッドが終了するまで実行を待機させます。
に追加PropertyChangeListenerすると、からステータスSwingWorkerを判断できますSwingWorker
のメソッドに実装get()するSwingWorkerdone()必要があります。そうしないと、呼び出されたメソッドから例外を取得できません。
コードによって異なりますが、現在のスレッドが終了するまで設定を変更できるとは思えませんが、SwingWorker#cancel()このインスタンスを再起動してから再起動する方がよいでしょう。
-タスクがあなたのものであるActionEvent場合はボタンをチェックインし、それがtrueの場合にのみ続行できます。ただし、ポップアップなどを表示したい場合があります。そうしないと、何も起こらない理由がユーザーに混乱する可能性があります。task.isDone()SwingWorker
もう1つの簡単な解決策は、タスクの実行中にボタンを公開して無効にし、終了時に再び有効にすることです。その後、ユーザーは準備ができるまでボタンをクリックできません。