4

私はswingを使用しており、アプリケーションでは、5秒ごとにインターネット接続を確認したり、ファイルシステムの変更を監視したり、サーバーからファイルを同期したりするなど、多くのスレッドを並行して実行する必要がありまし

上記のような時間のかかるタスクはすべて実行されSwingWorkerているため、GUIがフリーズすることはありません。

同時に、サーバーへのファイルのアップロードなど、他の時間のかかるタスクを実行する必要があります。この目的のために、私はswingWorkerも使用しました。次に、これらすべてのswingworkerをexecuterServiceに送信して、スレッドプーリングを行い、相互に影響を与えないようにします。

私の実行サービスはこんな感じです。30スレッドで十分だと思いました。

static ExecutorService threadExecutor;
threadExecutor = Executors.newFixedThreadPool(30);

次に、同じサービスでスレッドを送信します。

threadExecutor.submit(monitorinternetconnectivity); //submitting swingworker obejct

開始時に送信するスレッドとランタイムを追加するスレッドの一部は、実行時に追加すると、インターネット接続の監視のように、ジョブを完了したり、ジョブの実行を停止したりしません。

スイングワーカーのような同じ機能を持つ方法、または複数のスイングワーカーを使用するための最良の方法はありますか?実行時に新しいswingwokerexecuterサービスに追加できるはずです

4

1 に答える 1

1
  1. SwingWorkerは独自のThreadPoolを使用します。
  2. SwingWorkerは、GUIの更新が必要になった後(つまり、数ミリ秒以上必要なもの)の長時間実行タスクに使用する必要があります。
  3. EDTの外部でGUI要素を更新するための呼び出しは実行しないでください(つまり、SwingWorker.done()メソッドから)

通常、EDT内のSwingコンポーネントフォームにアクセスするルール(ここを参照)に従う場合は、ロックに問題はありません。問題はむしろあなたのコードにあるのではないかと思いますが、確かにそれを見る必要があります。

于 2013-02-24T15:24:55.993 に答える