actualizar una JProgressBar mientras procesa

Sé que el tema ya se ha visto en muchas Preguntas y ha sido respondido, pero aún así, no puedo superarlo.

Solo quiero actualice una barra de progreso mientras extrae algunas cosas de un archivo xml grande. Pensé que era suficiente tener el bucle que consume mucho tiempo en un hilo diferente, pero ... Todo lo que pude obtener es la barra de progreso o no se mostró en absoluto, o se actualizó al final, justo antes de que se cierre.

Instalado en algún lugar cerca del lanzamiento de la aplicación, tengo:

public class SomeClass {
    private SomeClass () {
        myXMLParser reader = new myXMLParser();
        CoolStuff fromXml = reader.readTheXml();
    }
}

mientras muestra y actualiza un JDialog con un JProgressBar:

public class LoadingDialog extends JDialog {
    private JProgressBar progressBar;
    /* ... */
    public void progress() {
        progressBar.setValue(progressBar.getValue() + 1);
    }
}

Así que tengo este myXMLParser:

public class myXMLParser {
    private LoadingDialog loadingDialog = new LoadingDialog();

    public CoolStuff readTheXml() {
        CoolStuff fromXml = new CoolStuff();
        while(manyIterations) {
            loadingDialog.progress();
            fromXml.add(some() + xml() + reading());
        }
        return fromXml;
    }
}

He visto muchas cosas conSwingWorker y usandoPropertyChange eventos actualizan la barra de progreso, pero siempre se dan ejemplostodo en un, con el procesamiento y la barra de progreso dentro de la misma clase, y con las clases dentro de las clases, y desde que comienzo en Java, no pude traducir eso a mi situación.

¿Alguna ayuda? ... ¿Algún consejo (no demasiado obvio)?

Editar Así que gracias a btantlinger funcionó así:

public class SomeClass {
    private SomeClass () {
        myXMLParser reader = new myXMLParser();
        new Thread(new Runnable() {
            @Override
            public void run() {
                CoolStuff fromXml = reader.readTheXml();
            }
        }).start();
    }
}

public class LoadingDialog extends JDialog {
    private JProgressBar progressBar;
    /* ... */
    public void progress() {
        progressBar.setValue(progressBar.getValue() + 1);
    }
}

public class myXMLParser {
    private LoadingDialog loadingDialog = new LoadingDialog();

    public CoolStuff readTheXml() {
        CoolStuff fromXml = new CoolStuff();
        while(manyIterations) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    loadingDialog.progress();
                }
            });
            fromXml.add(some() + xml() + reading());
        }
        return fromXml;
    }
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta