データベースからデータを取得し、ユーザーがその時点で既存のデータを変更できないようにする方法が必要でした。
私はSwingWorkerを作成してdbを更新し、モーダルJDialogを作成してユーザーに何が起こっているかを示しました(JProgressBarを使用)。モーダルダイアログのdefaultCloseOperationはDO_NOTHINGに設定されているため、適切な呼び出しでのみ閉じることができます-私はを使用しますsetVisible(false)
。
MySwingWorkerTask myTask = new MySwingWorkerTask();
myTask.execute();
myModalDialog.setVisible(true);
SwingWorkerはdoInBackground()内でいくつかのことを行い、最後に次を呼び出します。
myModalDialog.setVisible(false);
私の唯一の懸念と私の質問:SwingWorkerは、ワーカーがスポーンした後、ラインに入るsetVisible(false)
前に実行する可能性がありますか?setVisible(true)
その場合、setVisible(true)
は永久にブロックされる可能性があります(ユーザーはモーダルウィンドウを閉じることができません)。
次のように実装する必要がありますか?
while (!myModalDialog.isVisible()) {
Thread.sleep(150);
}
myModalDialog.setVisible(false);
それが実際に閉じられることを確認するには?