実行する必要のあるタスクには、外部サーバーからのデータの要求、データに対する(かなり長い)処理の実行、および処理の結果でGUIを更新することが含まれます。サーバーが応答しない可能性があるため、タスクはSwingWorkerに適しています。doInBackground()
メソッドが結果を取得し、doneメソッドがGUIを更新します。
これは数秒に1回発生する必要があります。whileループとThread.sleepを使用して、スリープするたびに新しいSwingWorkerを作成できることはわかっています。しかし、私が読んだものはすべて、ループと睡眠を使用すると眉をひそめます。タイマーを使いたいのですが:
スイングタイマーの使用は逆効果のようです。それらはEDTで実行されるため、基本的にSwingWorkerのdoInBackgroundメソッドを使用する理由はありません。サーバーが応答しない場合、GUIは応答しません。
java.util.Timerを使用すると、少し無駄に思えます。TimerTask()のバックグラウンドスレッドが作成されるようです。実際の作業を行うためにSwingWorkerを作成しているだけなので、基本的に、別のスレッドを作成するバックグラウンドスレッドを作成しています。バックグラウンドスレッド。
誰かが私に最善の解決策を教えてもらえますか?SwingWorkerはタスクに最適であると思われるので、これを使い続けたいと思いますが、手伝うことができれば、whileループの使用は避けたいと思います。
ありがとう