イベントディスパッチスレッドで2つのコンポーネントを同時に実行する方法は?
-
28-10-2019 - |
質問
Jbuttonをクリックすると、データベースからいくつかのデータをロードし、多くのコントロールを備えたJDialogを初期化し、それらのコントロールをロードされたデータで埋め、そのゆっくりとしたJdialogを表示します。これには、最終的にJDialogを表示するのに約3〜5秒かかります。これにより、プログラムは悪い方法でフリーズします。
このような遅いプロセスを読み込み、初期化しながら、忙しいラベルを表示するために、SwingxのJxbusylabelを使用した小さなJdialogを作成しました。しかし、遅いダイアログを初期化しながら、この忙しいラベルJdialogをEDTで実行するにはどうすればよいですか?
注:DBからのデータの読み込みは遅くはありませんが、重いJDialogとそのコンポーネントを初期化すると、処理が遅くなります。
解決
忙しいダイアログを表示します。
始める スイングワーカー そして、背景で長期にわたるすべてのタスクを実行します(データベース)
完了したら、データベースからのデータを使用して大きなダイアログを作成します(SwingWorker.done(メソッド))
忙しいダイアログを非表示にし、大きなダイアログを表示します。
他のヒント
SwingWorkerをより適切に使用する必要があります:
- ビジーラベルでダイアログを作成し、スイングワーカーを作成します
- スイングワーカーを開始します(DBからデータを非同期にロードし、メインダイアログの制御を準備します)
- SwingWorker's Done()メソッドで、最初の小さなダイアログを非表示にして、メインのダイアログを表示します
所属していません StackOverflow