Java 关闭TornadoFX窗口时如何关闭整个应用程序?
当TornadoFX窗口关闭时,如何关闭整个应用程序 对于JavaFX,通常是:Java 关闭TornadoFX窗口时如何关闭整个应用程序?,java,kotlin,tornadofx,Java,Kotlin,Tornadofx,当TornadoFX窗口关闭时,如何关闭整个应用程序 对于JavaFX,通常是: val app = JFrame() app.defaultCloseOperation = JFrame.EXIT_ON_CLOSE 是否有方法检测TornadoFX视图是否已关闭?通常,关闭主阶段会激活应用程序类的stop()功能。这是您要覆盖以执行自己的关闭例程的内容: class MyApp : App (FirstView::class) { override fun stop() {
val app = JFrame()
app.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
是否有方法检测TornadoFX视图是否已关闭?通常,关闭主阶段会激活应用程序类的
stop()
功能。这是您要覆盖以执行自己的关闭例程的内容:
class MyApp : App (FirstView::class) {
override fun stop() {
super.stop()
/* Do your shutdown routine here */
}
}
然而,我也遇到过这样的情况,即逻辑被破坏,只有关闭所有程序窗口才能工作。如果您有一个“主窗口”要确保关闭程序,请将其添加到应用程序类中:
override fun start(stage: Stage) {
stage.setOnHiding { stop() }
}
编辑:我将使用您的IDE查看
stop()
函数到底为您做了什么,同时查看由Abra链接的答案,以了解vanilla JavaFXPlatform.exit()函数的功能,因为TornadFX只是JavaFX的核心,这是JavaFX应用程序最明确的关闭。该线程中的一些用户报告他们的程序仍将挂起,这取决于他们正在做什么,并建议添加System.exit(0)
,也就是Kotlin中的exitProcess(0)
,到他们的关机例行程序,以确保程序死机。@Abra这是为TornadoFX应用程序设计的。“对于JavaFX,它通常是:val app=JFrame()app.defaultCloseOperation=JFrame.EXIT_ON_CLOSE
”除了Swing,而不是JavaFX。另外,请注意,TornadFX的核心只是JavaFX之上的一个Kotlin框架。“通常,关闭主阶段会激活App类的stop()函数。[…]然而,我有过这样的例子,即逻辑被破坏,只有关闭所有程序窗口才能工作”。这不是违反逻辑的。如文件所述,如果配置为隐式退出,则关闭过程仅在最后一个窗口关闭时启动,而不一定在主阶段关闭时启动。如果要显式停止JavaFX运行时,则需要调用。应用程序#stop()
方法只是在适当的时间调用的生命周期方法;它不会激活生命周期的这一部分,可能永远不应该手动调用。@Slaw这似乎不正确。我制作了一些程序,这些程序只在主阶段窗口关闭时调用TornadFXApp.stop()
函数,即使其他窗口打开时没有所有者。然后出现了一些问题,可能是JavaFX本身存在错误,因为这不是文档中记录的情况。就我个人而言,我从未遇到过这个问题。@Slaw我认为你把JavaFX的应用程序#stop()
和TornadFX的应用程序#stop()
搞混了。