イベントディスパッチスレッドで2つのコンポーネントを同時に実行する方法は?

StackOverflow https://stackoverflow.com/questions/5869955

質問

Jbuttonをクリックすると、データベースからいくつかのデータをロードし、多くのコントロールを備えたJDialogを初期化し、それらのコントロールをロードされたデータで埋め、そのゆっくりとしたJdialogを表示します。これには、最終的にJDialogを表示するのに約3〜5秒かかります。これにより、プログラムは悪い方法でフリーズします。

このような遅いプロセスを読み込み、初期化しながら、忙しいラベルを表示するために、SwingxのJxbusylabelを使用した小さなJdialogを作成しました。しかし、遅いダイアログを初期化しながら、この忙しいラベルJdialogをEDTで実行するにはどうすればよいですか?

注:DBからのデータの読み込みは遅くはありませんが、重いJDialogとそのコンポーネントを初期化すると、処理が遅くなります。

役に立ちましたか?

解決

  1. 忙しいダイアログを表示します。

  2. 始める スイングワーカー そして、背景で長期にわたるすべてのタスクを実行します(データベース)

  3. 完了したら、データベースからのデータを使用して大きなダイアログを作成します(SwingWorker.done(メソッド))

  4. 忙しいダイアログを非表示にし、大きなダイアログを表示します。

他のヒント

SwingWorkerをより適切に使用する必要があります:

  1. ビジーラベルでダイアログを作成し、スイングワーカーを作成します
  2. スイングワーカーを開始します(DBからデータを非同期にロードし、メインダイアログの制御を準備します)
  3. SwingWorker's Done()メソッドで、最初の小さなダイアログを非表示にして、メインのダイアログを表示します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top