setVisible
- это метод, который влияет на GUI, вызывая что-то, что отображается (и, в случае модального диалога, подобного вашему, блокируется до закрытия диалога). Он (как и все, что изменяет видимый интерфейс) должен никогда не вызываться , кроме как в потоке диспетчеризации событий Swing. Вы вызываете его из doInBackground
метода SwingWorker
, который выполняется в фоновом потоке.
Чтобы исправить это, нужно сделать из waitForClose
переменную final
, которую вы создаете перед вызовом execute
для SwingWorker
, а затем сразу вызвать setVisible
после начинающий рабочий.
final JDialog waitForTrans = ...
// set up the dialog here
SwingWorker<String, Integer> worker = new SwingWorker<String, Integer>() {
...
};
worker.execute(); // start the background process
waitForTrans.setVisible(true); // show the dialog
Вам нужно сделать это в этом порядке, потому что в противном случае модальное диалоговое окно заблокирует вас от запуска работника.