Мне нужен был способ получить некоторые данные из базы данных и запретить пользователю изменять существующие данные на данный момент.
Я создал SwingWorker для обновления базы данных и модальный JDialog, чтобы показать пользователю, что происходит (с помощью JProgressBar). В модальном диалоговом окне по умолчаниюCloseOperation установлено значение 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);
чтобы убедиться, что он действительно закроется?
myModalDialog.setVisible(false);
вdone()
вместоdoInBackground()
. Почему бы тебе не позвонитьsetVisible(true)
передexecute
? - person assylias   schedule 30.10.2012