调用stage.close()后如何防止代码执行?
Posted
技术标签:
【中文标题】调用stage.close()后如何防止代码执行?【英文标题】:How to prevent code from executing after calling stage.close()? 【发布时间】:2017-04-14 11:19:49 【问题描述】:我正在使用 JavaFX。
当某个文件未加载时,我希望该阶段关闭并且该实例中的代码停止执行。
catch (FileNotFoundException ex)
stage.close();
System.out.println("This should not appear.");
调用 stage.close() 会关闭程序,但在此之前,程序中的一些其他代码会被执行。我不希望这种情况发生。
如何立即关闭当前阶段(或至少阻止其他代码执行)?
【问题讨论】:
How to close an entire JavaFX application?的可能重复 @limonik - 我不想关闭整个应用程序。我只想关闭当前阶段。 您说:“我要关闭舞台,停止执行程序。”。那么你真正想要达到的目标是什么?执行的“其他一些代码”是什么? @DVarga- 我可能没有使用正确的术语,但基本上,我的程序从一个阶段开始。该阶段产生另一个阶段。我希望第二阶段退出而不影响第一阶段,我希望它退出而不继续调用更多代码。 【参考方案1】:使用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()
,意思是只有窗口会被隐藏,应用程序不会关闭。
编辑1:
如果您想在舞台隐藏时执行代码。使用以下代码段。
primaryStage.setOnHiding(E ->
// perform actions upon hiding.
);
EDIT2:
如果您希望第一个阶段等待第二个阶段,并在第二个阶段关闭后继续使用secondaryStage.showAndWait()
。这样,如果您想在第一个 Stage 上继续执行,您只需关闭辅助 Stage。
【讨论】:
我已经尝试过 Platform.exit,但它关闭的不仅仅是当前阶段。它也关闭了其他阶段。它也不会阻止它之后的代码。 我创建第二阶段的方式是使用Application game =
gameType.newInstance();阶段 newStage = new Stage(); game.start(newStage);` 我不认为 showAndWait 会在那里工作,因为游戏对象正在创建自己的舞台。
您创建了 2 个应用程序类实例?那是个坏主意。只使用一个,第二阶段使用newStage.showAndWait()
。它会给出你需要的结果。
也许我在这里遗漏了一些东西,但是如果您总是希望在抛出 FileNotFoundException
时关闭舞台,为什么要将一些您永远不想执行的代码放在 catch
块中?将阶段关闭时不想执行的所有代码放在try
块中,然后将stage.close()
语句放在catch
块中。这样try
块中的代码只有在没有抛出异常的情况下才会被执行。以上是关于调用stage.close()后如何防止代码执行?的主要内容,如果未能解决你的问题,请参考以下文章