Was haltet Ihr von diesem workaround?

Status
Nicht offen für weitere Antworten.

ajva

Mitglied
Es geht darum folgendes Problem zu lösen:

mein Programm soll als GUI ausschließlich ein TrayIcon besitzen und es soll unter Linux/Gnome autogestartet werden. Da aber zu dem Zeitpunkt des Autostartens blöderweise das SystemTray noch nicht existiert, schmeißt SystemTray.add(TrayIcon) eine AWTException. Ich habe es nun so gelöst, dass das Programm das add solange wiederholt, bis es geklappt hat oder 50 Versuche verstrichen sind.

Hier der entsprechende Codeschnipsel:

Code:
		boolean tray_not_shown = true;
		int fail_count = 0;
		while(tray_not_shown){
			try{
				tray.add(trayicon);
				tray_not_shown = false;
			}
			catch(AWTException e){
				fail_count++;
				out(e.getMessage() + "(" + fail_count + ". try)");
			}
			try{
				Thread.sleep(1000);
			}
			catch(Exception e){}

			if(fail_count > 49){
				System.exit(0);
			}
		}

Es braucht nun ca. 3 Versuche und alles funzt. Trotzdem möchte ich die Frage in die Runde werfen, ob jemand ne bessere Idee hat und wie sowas noch aussehen könnte.
 

foobar

Top Contributor
On some platforms the system tray may not be present or may not be supported, in this case getSystemTray() throws UnsupportedOperationException. To detect whether the system tray is supported, use isSupported().
Quelle: http://java.sun.com/javase/6/docs/api/java/awt/SystemTray.html

Versuch doch mal anstatt dich daruf zu verlassen, daß eine Exception fliegt zu überprüfen, ob du das Tray adden kannst. Dafür gibt es die Methode isSupported().
 

ajva

Mitglied
Danke für den Hinweis. Aber ich denke, da würde mein Workaround sehr ähnlich ausschauen. Aber hast recht, wäre wahrscheinlich etwas eleganter damit.
 
G

Gast

Gast
vielleicht wartest du auch einfach ein paar sekunden und versuchst dann das icon zu setzen...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben