JProgressBar не вызывает propertyChange для setProgress

Я прочитал много разных статей о JProgressBar ... включая хитрый код, найденный в Java;Вот.

Большинство из них указывают на то, что вам нужен SwingWorker, чтобы все происходило правильно, что имеет смысл, я так понимаю. Я обнаружил, что когда я вызываю setProgress (значение) для обновления индикатора выполнения, он не вызывает событие propertyChange большую часть времени. Я проверил значение, которое я передаю в setProgess, и оно определенно меняется каждый раз, так что я не уверен, слишком ли быстро оно запускает событие? Пожалуйста, смотрите соответствующий код ниже, любая помощь / объяснение будет с благодарностью.

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 вызывается с этим;

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();
    }
}    

РЕДАКТИРОВАТЬ:
Да, так что я должен был прочитать Javadocs лучше;

Поскольку PropertyChangeListeners уведомляются асинхронно в потоке диспетчеризации событий, несколько вызовов метода setProgress могут произойти до того, как будет вызван любой PropertyChangeListeners. В целях производительности все эти вызовы объединены в один вызов только с последним аргументом вызова.

Например, следующие вызовы:
setProgress (1);
setProgress (2);
setProgress (3);

может привести к одному уведомлению PropertyChangeListener со значением 3.

И.Е. Мое предположение, что setProgress стрелял слишком быстро, было верным. ProgressMonitor может быть лучшим решением.

Ответы на вопрос(3)

Ваш ответ на вопрос