[英]Load tab (Fragment) only once when it is shown for the first time and retain it for later use
[英]TextInputDialog only shown for the first time
請參考下面的代碼片段:
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
上使用Task
, setOnSucceeded()
,然后基於該Task
啟動一個Thread
。 更糟糕的是,該對話框根本不會顯示,並且再也不會產生任何錯誤。
您需要設置以下內容:
Platform.setImplicitExit(false);
否則,當您關閉最后一個窗口時,JavaFX運行時將關閉,因此,為什么Platform.runLater()
只為您工作一次
平台摘要:
將implicitExit屬性設置為指定的值。 如果此屬性為true,則在關閉最后一個窗口時,JavaFX運行時將隱式關閉;否則,將關閉JavaFX運行時。 JavaFX啟動器將調用Application.stop()方法並終止JavaFX應用程序線程。 如果此屬性為false,則即使關閉了最后一個窗口,應用程序也將繼續正常運行,直到應用程序調用exit()。 默認值是true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.