JProgressBar não acionando o propertyChange no setProgress

Eu li muitos artigos diferentes sobre o JProgressBar ... incluindo o código desonesto encontrado em Java;Aqui.

A maioria indica que você precisa de um SwingWorker para fazer as coisas acontecerem corretamente, o que faz todo o sentido, eu entendo muito. Eu estou achando que quando eu chamo setProgress (valor) para atualizar a barra de progresso, ele não está acionando o evento propertyChange na maioria das vezes. Eu verifiquei o valor que estou passando para setProgess e isso definitivamente muda sempre, então não tenho certeza se está apenas disparando o evento muito rapidamente? Por favor, veja o código relevante abaixo, qualquer ajuda / explicação seria muito 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 chamou com isso;

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:
Sim, então eu deveria ter lido melhor os Javadocs;

Como PropertyChangeListeners são notificados de forma assíncrona nas várias chamadas do Event Dispatch Thread para o método setProgress podem ocorrer antes de qualquer PropertyChangeListeners ser chamado. Para fins de desempenho, todas essas invocações são reunidas em uma única invocação apenas com o último argumento de invocação.

Por exemplo, as seguintes invocações:
setProgress (1);
setProgress (2);
setProgress (3);

pode resultar em uma única notificação PropertyChangeListener com o valor 3.

I.E. minha suposição de que setProgress estava disparando muito rapidamente estava correta. Um ProgressMonitor pode ser uma solução melhor.

questionAnswers(3)

yourAnswerToTheQuestion