ich von here gesehen habe, wie man Behälter benutzt. So verwende ich es auf diese Weise:Wie man Java-Anwendung in Systemtray setzt, wenn Benutzer auf nahe Fenster klickt
private void checkTray() throws IOException {
if (SystemTray.isSupported()) {
System.out.println("system tray supported");
tray = SystemTray.getSystemTray();
Image image = ImageIO.read(new FileInputStream(new File("logo.png")));
ActionListener exitListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Exiting....");
System.exit(0);
}
};
PopupMenu popup = new PopupMenu();
MenuItem defaultItem = new MenuItem("Exit");
defaultItem.addActionListener(exitListener);
popup.add(defaultItem);
defaultItem = new MenuItem("Open");
defaultItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(true);
setExtendedState(JFrame.NORMAL);
}
});
popup.add(defaultItem);
trayIcon = new TrayIcon(image, "SystemTray Demo", popup);
trayIcon.setImageAutoSize(true);
}
addWindowStateListener(new WindowStateListener() {
public void windowStateChanged(WindowEvent e) {
if (e.getNewState() == ICONIFIED) {
try {
tray.add(trayIcon);
setVisible(false);
System.out.println("added to SystemTray");
} catch (AWTException ex) {
System.out.println("unable to add to tray");
}
}
if(e.getNewState() == WindowEvent.WINDOW_CLOSING){
try {
tray.add(trayIcon);
setVisible(false);
System.out.println("added to SystemTray");
} catch (AWTException ex) {
System.out.println("unable to add to system tray");
}
}
if (e.getNewState() == 7) {
try {
tray.add(trayIcon);
setVisible(false);
System.out.println("added to SystemTray");
} catch (AWTException ex) {
System.out.println("unable to add to system tray");
}
}
if (e.getNewState() == MAXIMIZED_BOTH) {
tray.remove(trayIcon);
setVisible(true);
System.out.println("Tray icon removed");
}
if (e.getNewState() == NORMAL) {
tray.remove(trayIcon);
setVisible(true);
System.out.println("Tray icon removed");
}
}
});
}
und in Konstruktor:
this.setDefaultCloseOperation(JFrame.ICONIFIED);
Wenn ich auf eine enge Fenster klicken, meine Anwendung geht nicht auf das System versuchen, aber es schließt sich. Wie kann ich es lösen? kann mir jemand helfen?
Seit wann 'JFrame.ICONIFIED' ein Wert für wird [setDefaultCloseOperation()] (http://docs.oracle.com/javase/6/docs/api/ javax/swing/JFrame.html # setDefaultCloseOperation (int)? WindowConstants http://docs.oracle.com/javase/6/docs/api/javax/swing/WindowConstants.html – ecle
also muss ich Nothing_on_close verwenden? – JackTurky
Ja, da Sie "setVisible (true)" setzen möchten, um den Frame wieder sichtbar zu machen. – ecle