Java: main auf beenden eines GUIs warten lassen?

LostHero

Admiral Special
Mitglied seit
07.08.2006
Beiträge
1.597
Renomée
39
Standort
Osnabrück
Ich stehe gerade aufm Schlauch, ich habe ein mittlerweile recht umfangreiches Progamm geschrieben mit einem komplexen GUI.

Dazu habe ich von begin an nen "Errorlogger" geschrieben, der diverse Debugging informationen in verschiedene Dateien schreibt.

Ich erzeuge das GUI wie gewohnt via

Code:
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					gui = new MainFrame(LOG, VERSION);
					gui.setVisible(true);
				}
			});

das LOG-Objekt ist dabei mein Errorlogger.
Das problem dabei ist nun, dass ich den Errorlogger über LOG.exit() terminieren muss da die vom Logger erzeugten Dateien sonst alle leer sind (mir ist gerade nicht ganz klar wieso).

Die komplette Main sieht dabei so aus:

Code:
	public static void main(String[] args) {
		LOG = new Logger();
		LOG.log("TracklogTools v" + VERSION + " werden initialisiert...");
		
		if(args.length > 0) {
			LOG.log(PREFIX + "Modus: NoGUI");
			String s = "";
			
			for(int i = 0; i <= args.length; i++) {
				s = s + i + args[i] + ", ";			
			}
			
			LOG.log("Parameter: " + s);
			new NoGUI(LOG, args);
		}else {
			LOG.log(PREFIX + "Modus: GUI");
			
			
			SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					gui = new MainFrame(LOG, VERSION);
					gui.setVisible(true);
					LOG.exit();
				}
			});			
		}
		LOG.exit();		
	}


Für mein Problem relevant ist nur der else Fall.
Mir ist klar, dass das GUI als neuer Thread erzeugt wird, die Frage ist, wie ich die main-Methode dazu bringen kann auf das beenden des GUIs zu warten.

Hatte es schon mit nem while(gui.isVisible()) { //tue nichts } probiert, aber das ist nicht wirklich sinnvoll...

Jemand ne Idee?


PS:
Das LOG.exit() in die close(), bzw exit() Methode meines GUIs zu packen ist auch nicht sinnvoll, da die erzeugten Dateien im Falle eines unerwarteten Fehlers/Absturzes dann ebenfalls leer sind :(.



EDIT:

hmmm ok ich bin ein idiot. hat sich erledigt!
 
Zuletzt bearbeitet:
Hallo,

ich weiss, späte Antwort. Die Lösung ist aber recht simpel: in der else-Klausel untermittelbar nach dem Start von LOG mittels LOG.join() auf die Beendigung von LOG warten.

Vielleicht liest du ja noch mit ;-)
 
Zurück
Oben Unten