Tôi đã xem từ here cách sử dụng khay. Vì vậy, tôi sử dụng nó theo cách này:Cách đặt ứng dụng java vào Systemtray khi người dùng nhấp vào các cửa sổ đóng
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");
}
}
});
}
và trong constructor:
this.setDefaultCloseOperation(JFrame.ICONIFIED);
Khi tôi bấm vào cửa sổ gần, ứng dụng của tôi không đi vào hệ thống cố gắng, nhưng nó đóng chính nó. Làm thế nào tôi có thể giải quyết nó? Ai đó có thể giúp tôi?
Kể từ khi 'JFrame.ICONIFIED' trở thành một giá trị cho [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
vì vậy tôi phải sử dụng Nothing_on_close? – JackTurky
Có, vì bạn muốn 'setVisible (true)' có thể hiển thị lại khung hình – ecle