Выполнение любой операции блокировки в потоке диспетчеризации событий приведет к тому, что ваш графический интерфейс перестанет отвечать на запросы и перестанет перекрашиваться. Вот почему длительные операции должны выполняться в фоновом потоке.
Кажется, вы знаете, что вам нужно что-то делать в фоновом потоке, но все же хотите заблокировать EDT. Ты не должен этого делать. Вместо этого вам нужен обратный вызов - некоторый код, который будет запускаться после завершения фоновых потоков.
Уже предоставленный механизм обратного вызова, доступный в Java 6+: SwingWorker
. Реализуйте работника, поместив join()
s (и start()
s) в метод doInBackground()
. Тогда любые операции Swing, которые вы хотите выполнить позже, могут перейти в done()
.