请参阅下面的代码段:
public class Application extends javafx.application.Application implements ActionListener {
private java.awt.SystemTray tray;
private java.awt.TrayIcon trayIcon;
private java.awt.PopupMenu popupMenu = new PopupMenu();
private java.awt.MenuItem menuItem = new MenuItem("My Item");
@Override
public void start(Stage primaryStage) throws Exception {
if (!SystemTray.isSupported())
return;
menuItem.addActionListener(this);
popupMenu.add(menuItem);
trayIcon = new TrayIcon(image, "Title", popupMenu);
tray = SystemTray.getSystemTray();
tray.add(trayIcon);
}
@Override
public void actionPerformed(ActionEvent e){
Platform.runLater(() -> {
Optional<String> result = new TextInputDialog().showAndWait();
if(result.isPresent() && !result.get().isEmpty()){
...
}
})
}
}
对话框只会显示一次。第二次或更多次actionPerformed()
被触发,它不会弹出,也不会抛出任何异常。
我已尝试在Task
上使用setOnSucceeded()
,Task
,并根据Thread
开始Task
。更糟糕的是,对话框根本没有显示出来,而且没有出现错误。
答案 0 :(得分:1)
您需要设置以下内容:
Platform.setImplicitExit(false);
否则JavaFX运行时将在您关闭最后一个窗口时关闭,因此Platform.runLater()
仅适用于您的原因
来自Platform的片段:
将implicitExit属性设置为指定值。如果这 如果属性为true,则JavaFX运行时将隐式关闭 最后一个窗口关闭; JavaFX启动程序将调用 Application.stop()方法并终止JavaFX应用程序线程。 如果此属性为false,则应用程序将继续运行 通常甚至在最后一个窗口关闭后,直到应用程序 调用exit()。默认值为true。