Для справки:
Когда модальный диалог запускается в Swing, выполнение этого потока останавливается до тех пор, пока диалог не будет закрыт.
Вот почему ваш метод done () никогда не вызывался (doInBackground () не может завершиться, а done () вызывается только после этого).
Открытие модального диалога из действия, вызываемого потоком EDT, немного отличается. Сам EDT будет продолжать обрабатывать события, но фактический код потока событий (код действия), который открывает модальное диалоговое окно, все еще блокируется (и ждет, пока диалоговое окно не будет закрыто).
Естественно, в случае немодальных диалогов эта проблема никогда не появляется.
Кстати: вы никогда не должны открывать диалог вне EDT.
Если решение принято для потока, не являющегося EDT, вам нужно использовать SwingUtilities.invokeLater (), чтобы фактически открыть диалоговое окно.
Звучит сложно, но на самом деле это не так, как только вы овладеете концепцией EDT.