SwingUtilities.invokeLater
используется, если у вас есть что-то, что должно работать в EDT.
Если у вас есть длительное задание, вам вместо этого нужно использовать SwingWorker
, так как он не запускается в EDT и, следовательно, не вызывает зависание графического интерфейса во время выполнения.