调用stage.close()后如何防止代码执行?

时间:2016-11-30 08:08:11

标签: java javafx

我正在使用JavaFX。

当某个文件没有加载时,我希望关闭该阶段并停止执行该实例中的代码。

catch (FileNotFoundException ex)
{
    stage.close();
    System.out.println("This should not appear.");
}

调用stage.close()会关闭程序,但在此之前,程序中的其他一些代码会被执行。我不希望这种情况发生。

如何立即关闭当前阶段(或至少阻止其他代码执行)?

1 个答案:

答案 0 :(得分:0)

使用stage.setOnCloseRequest在舞台关闭前执行操作。像

 public void start(Stage primaryStage)
 {
       // do all the regular stuff.
       primaryStage.setOnCloseRequest(E -> {
            // perform actions before closing
       });
 }

覆盖Application类中的stop()方法也是添加关闭钩子的有效方法。虽然从实验开始,但是当应用程序关闭时,它并不总是被调用。

最后,如果要关闭整个应用程序,请使用Platform.exit()(静态方法)。 stage.close()方法等于stage.hide(),意味着只隐藏窗口,应用程序不会关闭。

EDIT1:

如果要在阶段隐藏时执行代码。使用以下snippit。

 primaryStage.setOnHiding(E -> {
      // perform actions upon hiding.
 });

EDIT2:

如果您希望第一个舞台等待第二个舞台,并在第二个舞台关闭后继续使用secondaryStage.showAndWait()。这样,如果要在第一个舞台上继续执行,只需关闭辅助舞台。