Tôi Làm một App đơn giản sử dụng JavaFX UI, Ứng dụng đơn giản chỉ làm điều đó:ứng dụng JavaFX trong System Tray
- có một biểu tượng ở khay hệ thống, mà khi nhấp thấy một cửa sổ, khi nhấp một lần nữa giấu nó, trên rightclick hiển thị menu có mục "thoát" 1 số
Tôi đã tạo giao diện người dùng và đặt ứng dụng vào khay Sys, nhưng tôi không thể hiển thị/ẩn nó bằng phương thức Normal Actionlistener, nhưng tôi gặp lỗi này:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0
đây là Code:
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionListener;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(final Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!"); }
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("Germany-politcal-map.jpg");
PopupMenu popup = new PopupMenu();
MenuItem item = new MenuItem("Exit");
popup.add(item);
TrayIcon trayIcon = new TrayIcon(image, "Amr_Trial", popup);
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
}
};
ActionListener listenerTray = new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent arg0) {
// TODO Auto-generated method stub
primaryStage.hide();
}
};
trayIcon.addActionListener(listenerTray);
item.addActionListener(listener);
try{
tray.add(trayIcon);
}catch (Exception e) {
System.err.println("Can't add to tray");
}
} else {
System.err.println("Tray unavailable");
}
//
}
}
Vâng, tôi chỉ thấy rằng trong trang Tài liệu, thx rất nhiều. Nhưng khi tôi ẩn nó, nó không xuất hiện trở lại ngay cả khi tôi sử dụng show() – amrlab
Câu trả lời được cập nhật để giải thích hành vi ngầm định/thoát. – jewelsea
thực sự, Thx rất nhiều, tôi đã tìm kiếm rất nhiều cho điều này !! – amrlab