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

Java 如何防止调用stage.close()后执行代码?,java,javafx,Java,Javafx,我正在使用JavaFX 当某个文件没有加载时,我希望stage关闭,该实例中的代码停止执行 catch (FileNotFoundException ex) { stage.close(); System.out.println("This should not appear."); } 调用stage.close()关闭程序,但在此之前,程序中的一些其他代码将被执行。我不想那样 如何立即关闭当前阶段(或至少阻止其他代码执行)?使用stage.setOnCloseRequest

我正在使用JavaFX

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

catch (FileNotFoundException ex)
{
    stage.close();
    System.out.println("This should not appear.");
}
调用stage.close()关闭程序,但在此之前,程序中的一些其他代码将被执行。我不想那样


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

使用
stage.setOnCloseRequest
在阶段关闭前执行操作。像

 public void start(Stage primaryStage)
 {
       // do all the regular stuff.
       primaryStage.setOnCloseRequest(E -> {
            // perform actions before closing
       });
 }
重写应用程序类中的
stop()
方法也是添加关闭挂钩的有效方法。尽管根据经验,当应用程序关闭时,并不总是调用它

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

编辑1: 如果要在后台文件隐藏时执行代码。使用以下snippit

 primaryStage.setOnHiding(E -> {
      // perform actions upon hiding.
 });
编辑2:
如果希望第一阶段等待第二阶段,并在第二阶段关闭后继续,请使用
secondaryStage.showAndWait()
。这样,如果要继续第一阶段的执行,只需关闭第二阶段。

可能重复@limonik-我不想关闭整个应用程序。我只想关闭当前阶段。你说:“我希望阶段关闭,程序停止执行。”。那么你真正想要实现什么呢?执行的“其他代码”是什么?@DVarga-我可能没有使用正确的术语,但基本上,我的程序从一个阶段开始。这个阶段产生另一个阶段。我希望第二个阶段退出而不影响第一个阶段,我希望它退出而不继续调用更多代码。我尝试了Platform.exit,但它关闭的不仅仅是当前阶段。它还关闭了其他阶段。我创建第二阶段的方法是使用
applicationgame=
gameType.newInstance();Stage newStage=newStage();游戏开始(新闻台);`我认为showAndWait在那里不起作用,因为游戏对象正在创建自己的阶段。您创建了两个应用程序类实例吗?那是个坏主意。仅使用一个,对于第二阶段,请执行
newStage.showAndWait()
。它会给出您需要的结果。也许我这里遗漏了一些东西,但是如果您总是希望在抛出
FileNotFoundException
时关闭阶段,为什么要在
catch
块中放入一些您永远不想执行的代码?如果stage在
try
块中关闭,则将所有不希望执行的代码放入
stage.close()
语句,然后放入
catch
块中。这样,
try
块中的代码只有在没有引发异常的情况下才会执行。