Jetez un œil à SwingWorker et Utilisation d'un thread de travail Swing.
Lisez également sur Concurrency in Swing pour plus d'informations sur la raison pour laquelle l'interface graphique se fige et pour un exemple concret d'utilisation d'un Swing Worker. (via @camickr)