Dai un'occhiata a SwingWorker e Utilizzare un thread di lavoro Swing.
Continua a leggere anche su La concorrenza in Swing per ulteriori informazioni sul motivo per cui la GUI si blocca e per un esempio funzionante di utilizzo di Swing Worker. (tramite @camickr)