簡體   English   中英

TextInputDialog僅首次顯示

[英]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上使用TasksetOnSucceeded() ,然后基於該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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM