[CODE]
class SO extends Thread
{
JDialog d;

public SO(JDialog d)
{
this.d = d;
}

public void run()
{
//Qui chiami la classe che fa il ciclo while passandogli tra i parametri anche [B]d/B]
}
}

SO so = new SO(popup_window);
so.start();
popup_window.show();
[CODE]

Breve spiegazione
La classe SO come vedi è molto semplice e la puoi benissimo includere in un'altra classe (facendola diventare una classe interna). La prima cosa che devi fare come vedi è crearti un oggetto (so) della classe SO ed in seguito chiamarne il metodo start(). Nell'esempio che ti ho postato ho supposto che tu ti crei una classe che estenda JDialog in cui magari puoi mettere un messaggio tipo "Elaborazione in corso, attendere prego... Se si desidera interrompere il ciclo chiudere questa finestra" quindi crei un oggetto (nel mio caso l'ho chiamato popoup_window) di questa classe e lo passi al costruttore di so. Facendo questo potrai passare d alla classe in cui includerai il tuo ciclo; durante l'esecuzione del ciclo tu chiamerai il metodo isVisible() dell'oggetto d e quando questo ti restituirà false, vorrà dire che l'utente ha chiuso con la "x" la tua JDialog e a quel punto farai terminare il tuo ciclo ed il programma procederà con l'istruzione seguente a popup_window.show();

Sono stato chiaro?