Eche un vistazo a SwingWorker y Uso de un subproceso de trabajo Swing.
Lea también sobre Concurrencia en Swing para obtener más información sobre por qué la GUI se congela y para ver un ejemplo práctico del uso de un Swing Worker. (a través de @camickr)