Actualización de jProgressBar desde SwingWorker

Utilizo para monitorear una tarea de larga duración actualizando una Barra de progreso. La tarea de larga ejecución se realiza, por supuesto, en un subproceso de Swingworker.

Solía ​​programar cosas así:

public class MySwingWorkerClass extends SwingWorker<Void, Void> {   
    private JProgressBar progressBar;    

    public MySwingWorker(JProgressBar aProgressBar) {        
        this.progressBar = aProgressBar;           
        progressBar.setVisible(true);        
        progressBar.setStringPainted(true);
        progressBar.setValue(0);        
    }

    @Override
    public Void doInBackground() {
        //long running task
        loop {  
            calculation();
            progressBar.setValue(value);
        }
        return null;
    }    

    @Override
    public void done() {                
        progressBar.setValue(100);
        progressBar.setStringPainted(false);
        progressBar.setVisible(false);      
   }
}

pero recientemente descubrí que podía hacerlo usando el "setProgress" y definiendo el cambio de propiedad y haciendo cosas así.

public class MySwingWorkerClass extends SwingWorker<Void, Void> {   
    private JProgressBar progressBar;    

    public MySwingWorker(JProgressBar aProgressBar) {        
        addPropertyChangeListener(new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent evt) {
                if ("progress".equals(evt.getPropertyName())) {
                    progressBar.setValue((Integer) evt.getNewValue());
                }
            }
        });

        progressBar.setVisible(true);        
        progressBar.setStringPainted(true);
        progressBar.setValue(0);
        setProgress(0);
    }

    @Override
    public Void doInBackground() {
        //long running task
        loop {  
            calculation();
            setProgress(value);
        }
        return null;
    }    

    @Override
    public void done() {                
        setProgress(100);
        progressBar.setValue(100);
        progressBar.setStringPainted(false);
        progressBar.setVisible(false);      
   }
}

Mi pregunta es: ¿es aceptable mi primer código o debo usar setProgress para cualquier motivo? El segundo código me parece más complicado y, en mi caso, no sé si hay alguna ventaja o razón para usar el segundo.

¿Algún consejo?

EDITAR Gracias por la respuesta. Como un resumen. La primera solución es "incorrecta" debido a que la actualización de la barra de progreso se realiza fuera del EDT. La segunda solución es "correcta" porque la actualización de la barra de progreso se realiza dentro del EDT

Ahora, de acuerdo con la respuesta "interesante" de @mKorbel en mi caso, mi cálculo da resultados en texto HTML que "inserto" (vereste enlace). Mi código actual es el siguiente.

Publico (cadena) y mi código de proceso se ve así.

@Override
    protected void process(List<String> strings) {
        for (String s : strings) {
            try {
                htmlDoc.insertBeforeEnd(htmlDoc.getElement(htmlDoc.getDefaultRootElement(), StyleConstants.NameAttribute, HTML.Tag.TABLE), s);
            } catch (BadLocationException ex) {
            } catch (IOException ex) {
            }
        }
    }

¿Cómo puedo reutilizar @mKobel para hacer lo mismo en mi caso? Me refiero a que utiliza para anular la representación de tablas en mi caso, ¿qué renderizador debo anular (jTextPane?) Y cómo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta