JProgressBar no activa la propiedad Change en setProgress

He leído muchos artículos diferentes sobre JProgressBar ... incluyendo el código poco fiable encontrado en Java;aquí.

La mayoría indica que necesitas un SwingWorker para que las cosas sucedan correctamente, lo que tiene mucho sentido, lo entiendo mucho. Estoy encontrando que cuando llamo a setProgress (valor) para actualizar la barra de progreso, no está activando el evento propertyChange la mayor parte del tiempo. He comprobado el valor que estoy transfiriendo a setProgess y definitivamente cambia cada vez, por lo que no estoy seguro de que esté disparando el evento demasiado rápido. Consulte el código relevante a continuación, cualquier ayuda / explicación sería muy apreciada.

class ProgBar extends SwingWorker
{
    public ProgBar()
    {
        addPropertyChangeListener(new PropertyChangeListener()
        {
           @Override
           public void propertyChange(PropertyChangeEvent evt)
           {
               if ("progress".equals(evt.getPropertyName()))
               {
                   int value = (Integer)evt.getNewValue();
                   System.out.println("propertyChange called with: " + value);
                   loginProg.setValue(value);
               }
           }
        });

        loginProg.setStringPainted(true);
        loginProg.setValue(0);
        setProgress(0);
    }

    @Override
    public Void doInBackground() throws InterruptedException
    {
        ...
        int count = 0;
        for (Folder f : folders)
        {
            ... // process 'f'
            setProgress((int)Math.min(((double)count/folders.length)*100.0, 100.0));
        }
        ...
        return null;
    }

    @Override
    public void done()
    {
        System.out.println("Done called.");
        setProgress(100);
        loginProg.setValue(100);
    }
}

JProgressBar llama con esto;

private void jButtonActionPerformed(java.awt.event.ActionEvent evt) 
{                                             
        // Create new thread to run progess bar.
        // Otherwise won't be able to update progress bar.
        ProgBar pb = new ProgBar();
        pb.execute();
    }
}    

EDITAR:
Sí, debería haber leído mejor los Javadocs;

Debido a que los PropertyChangeListeners se notifican de forma asincrónica en el evento Dispatch Thread, pueden ocurrir múltiples invocaciones al método setProgress antes de invocar cualquier PropertyChangeListeners. Para fines de rendimiento, todas estas invocaciones se unen en una sola invocación solo con el último argumento de invocación.

Por ejemplo, las siguientes invocaciones:
setProgress (1);
setProgress (2);
setProgress (3);

podría resultar en una sola notificación PropertyChangeListener con el valor 3.

ES DECIR. mi suposición de que setProgress estaba disparando muy rápido era correcta. Un ProgressMonitor podría ser una mejor solución.

Respuestas a la pregunta(3)

Su respuesta a la pregunta