从(现有的)Kotlin 程序启动 TornadoFX 应用程序

Launching a TornadoFX App from (an existing) Kotlin program

fun main(args: Array<String>) {

    HelloWorldApp().launch()
}

fun App.launch() {
    JFXPanel()
    Platform.runLater({
        start(Stage())
    })
}

这就是我现在所做的。有更好的吗?更简洁的方式?

以这种方式从同一个 kotlin 程序中 运行 多个不同的 TornadoFX 应用程序安全吗?我在某个地方读到一些关于全局变量的东西所以我想知道是否只有 1 是 allowed/recommended.

JVM 已经知道如何启动 JavaFX 应用程序,并且由于您的应用程序 class 扩展了 tornadofx.App 又扩展了 javafx.application.Application,您只需将 JVM 指向主 class 它会 运行 就好了。如果您想显式启动 TornadoFX 应用程序,JavaFX 提供了您应该使用的静态 launch 方法。

启动 JavaFX 或 TornadoFX 应用程序的典型主要功能是:

fun main(args: Array<String>) {
    Application.launch(HelloWorldApp::class.java, *args)
}

JavaFX 只允许 Application.launch 函数在 JVM 的生命周期中被调用一次,因此无论如何您都不能真正启动多个。但是,TornadoFX 提供了特殊的 OSGi 支持,允许您使用应用程序代理实例实际停止和重新启动同一 JVM 中的其他 TornadoFX 应用程序。

TornadoFX 还通过使用 Scopes 支持 JPro,它允许多个应用程序实例,但实际上没有多次调用 Application.launch

你可以这样开始:

fun main(args: Array<String>) {
    launch<HelloWorldApp>(args)
}

launch函数在tornadofx包中定义为顶层函数,HelloWorldApp是随机Applicationclass.