Dê uma olhada em SwingWorker e Usando um Swing Worker Thread. Leia também sobre Simultaneidade no Swing para obter mais informações sobre por que a GUI congela e para obter um exemplo funcional do uso de um Swing Worker. (via @camickr)