Hola:
En java hay un hilo encargado de manejar las ventanas llamado EDT (Event Dispatch Thread). Cuando al pulsar un botón ejecutas una que tarea tarda mucho, la tarea bloquea ese hilo que maneja las ventanas, por lo que estas dejan de responder o repintarse. Para evitarlo, conviene lanzar un nuevo hilo para esa tarea que tarda y así desbloquear el de ventanas. Para facilitar todo esto, existe la clase SwingWorker, que además añade facilidades para poner una barra de progreso a esa tarea que tarda mucho.
Aquí
http://chuwiki.chuidiang.org/index.p...on_SwingWorker tienes una explicación más detallada y un ejemplo de uso.
Se bueno.