JProgressBar nie wyzwala właściwości Change na setProgress

Przeczytałem wiele różnych artykułów na temat JProgressBar ... w tym podejrzanego kodu znalezionego w Javie;tutaj.

Większość wskazuje, że potrzebujesz narzędzia SwingWorker, aby wszystko działało poprawnie, co ma sens, rozumiem to bardzo. Stwierdzam, że gdy wywołam setProgress (wartość), aby zaktualizować pasek postępu, nie wyzwala ono zdarzenia propertyChange przez większość czasu. Sprawdziłem wartość, którą przekazuję do setProgess i zdecydowanie zmienia się za każdym razem, więc nie jestem pewien, czy po prostu odpalam zdarzenie zbyt szybko? Proszę zapoznać się z odpowiednim kodem poniżej, każda pomoc / wyjaśnienie byłoby bardzo mile widziane.

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 zadzwonił z tym;

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

EDYTOWAĆ:
Tak, powinienem był lepiej przeczytać Javadocs;

Ponieważ PropertyChangeListeners są powiadamiane asynchronicznie na wątku Dispatch Thread, wiele wywołań do metody setProgress może wystąpić przed wywołaniem dowolnego obiektu PropertyChangeListeners. Dla celów wydajności wszystkie te wywołania są łączone w jedno wywołanie tylko z ostatnim argumentem wywołania.

Na przykład następujące wywołania:
setProgress (1);
setProgress (2);
setProgress (3);

może spowodować pojedyncze powiadomienie PropertyChangeListener o wartości 3.

TO ZNACZY. moje założenie, że setProgress strzelał zbyt szybko, było prawidłowe. Lepszym rozwiązaniem może być ProgressMonitor.

questionAnswers(3)

yourAnswerToTheQuestion