Hey,
folgendes KSKB:
Es geht offensichtlich darum, dass ich nen Shutdown Hook haben möchte der das TrayIcon aus dem Tray löscht wenn die App beendet wird. Es fehlt jetzt hier ein echtes Icon, bei mir ist es ein richtiges Bild, aber ihr seht im Tray halt dann einen Platzhalter.
Was beim Start dieser Demo passiert ist nun leider, dass er in der run-Methode des Shutdown Hooks bei der remove() Zeile hängen bleibt, d.h. das Programm beendet sich nicht und bleibt hängen. Komisch aber: Wenn ich diese Zeile aus dem Shutdown Hook auskommentiere, und die unten auskommentierten Zeilen aktiviere, dann funktioniert alles.
Also kann es ja irgendwie nicht an der remove()-Methode liegen.
Wieso funzt das in der main, aber nich in der run des Shutdown Hooks?
Thx
edit: ich dachte mir vllt kümmert sich der SystemTray selber darum und das Icon war schon removed oder sonst was, aber das ist nicht der Fall, denn wenn man die App einfach killt dann bleibt das Icon im Tray angezeigt (bis man mit der Maus drüber fährt dann verschwindet es, aber so ist das denke ich nicht gedacht)
folgendes KSKB:
Java:
import java.awt.AWTException;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import javax.swing.ImageIcon;
public class Demo {
static final TrayIcon trayIcon = new TrayIcon(new ImageIcon(new byte[] {}).getImage());
public static void main(String[] args) {
try {
SystemTray.getSystemTray().add(trayIcon);
} catch (AWTException e) {
e.printStackTrace();
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("removing tray...");
SystemTray.getSystemTray().remove(trayIcon);
System.out.println("tray removed!");
}
});
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// SystemTray.getSystemTray().remove(trayIcon);
// System.out.println("tray removed in main-method");
System.exit(0);
}
}
Es geht offensichtlich darum, dass ich nen Shutdown Hook haben möchte der das TrayIcon aus dem Tray löscht wenn die App beendet wird. Es fehlt jetzt hier ein echtes Icon, bei mir ist es ein richtiges Bild, aber ihr seht im Tray halt dann einen Platzhalter.
Was beim Start dieser Demo passiert ist nun leider, dass er in der run-Methode des Shutdown Hooks bei der remove() Zeile hängen bleibt, d.h. das Programm beendet sich nicht und bleibt hängen. Komisch aber: Wenn ich diese Zeile aus dem Shutdown Hook auskommentiere, und die unten auskommentierten Zeilen aktiviere, dann funktioniert alles.
Also kann es ja irgendwie nicht an der remove()-Methode liegen.
Wieso funzt das in der main, aber nich in der run des Shutdown Hooks?
Thx
edit: ich dachte mir vllt kümmert sich der SystemTray selber darum und das Icon war schon removed oder sonst was, aber das ist nicht der Fall, denn wenn man die App einfach killt dann bleibt das Icon im Tray angezeigt (bis man mit der Maus drüber fährt dann verschwindet es, aber so ist das denke ich nicht gedacht)
Zuletzt bearbeitet: