Hola:
Java, por defecto, tiene un hilo que se encarga de repintar las ventanas y también de tratar los eventos de teclado y ratón. Si cuando se pulsa el teclado o ratón empiezas una tarea muy larga, estás ocupando ese hilo en tu tarea y no le dejas repintar ventanas, por ello, tu barra de progreso no avanza (no se repinta). Cundo termina tu tarea y liberas el hilo, java hace todo lo que tiene pendiente con las ventanas que hacer avanzar la barra de progreso varios pasos hasta el 100% ... pero a toda velocidad.
Para conseguir el efecto que quieres, debes, nada más pulsar el botón o lo que sea, lanzar un hilo nuevo que se encargue de tu tarea. De esta forma tu tarea deja de estar en el hilo de repintado de ventanas y tu barra de progreso se ira actualizando correctamente.
Estos dos enlaces pueden resultarte útiles
http://chuwiki.chuidiang.org/index.p...El_hilo_de_awt http://chuwiki.chuidiang.org/index.p...on_SwingWorker
Se bueno.