データベースからデータを取得し、その時点の既存のデータを変更できないようにする方法が必要でした。モーダルJDialogを安全に開いて閉じる(SwingWorkerを使用)
データベースの更新を行うSwingWorkerと、JProgressBarを使用して何が起こっているのかをユーザーに示すためのモーダルJDialogを作成しました。モーダルダイアログはdefaultCloseOperationがDO_NOTHINGに設定されているので、適切な呼び出しでのみ閉じることができます - 私はsetVisible(false)
を使用します。
MySwingWorkerTask myTask = new MySwingWorkerTask();
myTask.execute();
myModalDialog.setVisible(true);
SwingWorkerのは、doInBackground(内いくつかのものを行います)し、最後にそれが呼び出されます:
myModalDialog.setVisible(false);
私の唯一の懸念と私の質問: は、それがsetVisible(true)
である前に、SwingWorkerのはsetVisible(false)
を実行することを可能です労働者の後の行は産む?
もしそうなら、setVisible(true)
は永遠にブロックすることができます(ユーザーはモーダルウィンドウを閉じることができません)。
私のように何かを実装する必要があります:それは実際に閉じてしまいますことを確認する
while (!myModalDialog.isVisible()) {
Thread.sleep(150);
}
myModalDialog.setVisible(false);
?
あなたは 'myModalDialog.setVisible(false)を呼び出す必要があります。代わりに' doInBackground() 'の')( ''で完了です。なぜ 'execute'の前に' setVisible(true) 'を呼び出さないのですか? – assylias
setVisible(true)はブロッキングコールです – user1713059
母 - 非常に良い点があります:-) – assylias