Java 如何防止调用stage.close()后执行代码?
我正在使用JavaFX 当某个文件没有加载时,我希望stage关闭,该实例中的代码停止执行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
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
块中的代码只有在没有引发异常的情况下才会执行。