¿Qué está haciendo el programa ahora?
Un dibujo de un reloj de arena no suele responder la pregunta.
Para informar lo que va pasando, y actualizar una interfaz en java (Swing)
mientras algún hilo más interesante se ejecuta en background
existe el SwingWorker.
Típicos ejemplos son mover una barra, dar mensajes actualizados
de qué está haciendo el soft, informar progresos de algún proceso de fondo.
Hay un thread, llamado Event Dispatching Thread (EDT)
que es el encargado de actualizar los componentes visuales.
Este señor EDT sin embargo, no se ejecuta completamente si hay un thread corriendo,
es decir, no se actualizará la interfaz hasta que el hilo termine o ceda el control.
¿Cómo se usa el SwingWorker?
Se crea un objeto "worker" donde se implementa el hilo que cumpla la función,
o el "trabajo" que realizará en background del cual queremos tener noticias,
el hilo del worker no se ejecuta en la EDT, es decir, no actualiza directamente
la interfaz, sin embargo permite agregar propiedades que llaman a listener que
sí se van a ejecutar en EDT!
Básicamente como en este ejemplo