在showAndWait javafx之后继续执行程序

时间:2016-09-05 12:26:49

标签: javafx

你好,我有一个加载这样一个阶段的程序:

FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource(ConstantsUI.CHEMIN_VIEW+
                ConstantsUI.ECRAN_CAISSE_FERMEE));
        AnchorPane ecran = (AnchorPane) loader.load();

        // Show the scene containing the root layout.
        Scene scene = new Scene(ecran);

        MainApp.getInstance().getPrimaryStage().setScene(scene);

        genericController = loader.getController();
        genericController.setStage(MainApp.getInstance().getPrimaryStage());

        // on garde la fenêtre en premier plan
        MainApp.getInstance().getPrimaryStage().setMaximized(true);
        MainApp.getInstance().getPrimaryStage().show();
        MainApp.getInstance().getPrimaryStage().showAndWait();
        System.out.println("toto");

我有一个带有此代码的按钮:

@FXML
public void clickButton() {
    System.out.println("------here-----");
    stage.close();
}

我的问题是,在我点击我的按钮后,消息" toto"不可见。为什么?

感谢。

1 个答案:

答案 0 :(得分:1)

初级阶段不允许调用showAndWait

From the javadoc

  

<强>抛出:
      [...]
      IllegalStateException - 如果在主要阶段调用此方法。

您可以改为使用onHidden事件处理程序:

MainApp.getInstance().getPrimaryStage().setOnHidden(evt -> {
    System.out.println("toto");
});
MainApp.getInstance().getPrimaryStage().show();

或者,如果您想在应用程序的最后一个窗口关闭后运行代码(asumming您没有使用Platform.setExplicitExit(false)),则可以覆盖Application.stop()

@Override
public void stop() throws Exception {
    System.out.println("toto");
}