Безопасно открывайте и закрывайте модальный JDialog (используя SwingWorker)
Мне нужен был способ получить некоторые данные из базы данных и запретить пользователю изменять существующие данные на тот момент.
Я создал SwingWorker для обновления базы данных и модальный 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);
чтобы убедиться, что он действительно будет закрыт?