èneR: Struktur: Graphische Oberfläche

Hallo,
ich bin gerade dabei einen Proxy-Tester zu schreiben. (Ist mir egal ob es sowas schon gibt, es geht ums selber-schreiben!)
Consolen-Basiert funktioniert das schon ganz gut, allerdings wollte ich dem ganzen jetzt noch eine Graphische Oberfläche verpassen; und scheitere dort wo ich immer scheitere:
Der Struktur für die Graphische Oberfläche.

Problem;
Sobald das Programm gestartet wird, müssen Einstellungen, Proxylisten etc geladen werden. Während dessen soll ein Fenster mit dem Fortschritt angezeigt werden. Solbald das abgeschlossen ist, soll das eigentliche Haupt-Fenster angezeigt werden (mit den ganzen Optionen). Sobald der "Start"-Button geklickt wird soll die Aufgabe (das Testen von Proxys) gestartet wieden (geThreaded versteht sich). Während dessen soll das Interface trotzdem immernoch ansprechbar bleiben (falls z.B. das ganze abgebrochen werden soll).
Jedoch soll die ganze Zeit, wenn das Hauptfenster angezeigt wird zusätzlich die option bestehen das kreuz rechts oben zu benutzen und damit das Programm gezielt zu beenden. Falls das geschieht (wann auch immmer!) soll ein Fenster mit dem Fortschritt des Speicherns etc (evtl noch laufende Proxy-Test-Threads usw) angezeigt werden.

Was mir jetzt fehlt ist die Struktur, also was kommt in welche Klasse, damit das ganze die ganze Zeit ansprechbar bleibt?

Ich wäre sehr dankbar für jede Hilfe!

MfG,
èneR

P.S.: ".join()", ".interrupt()", "public void windowClosing ( WindowEvent w )" sind mir durchaus bekannt.
Und ja, ich habe dannach gegooglet und nichts brauchbares gefunden.