1
fun main(args: Array<String>) {

    HelloWorldApp().launch()
}

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

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

以这种方式在同一个 kotlin 程序中运行多个不同的 TornadoFX 应用程序是否安全?我在某个地方读到了一些关于全局变量的东西,所以我想知道是否只允许/推荐 1。

4

2 回答 2

4

JVM 已经知道如何启动 JavaFX 应用程序,并且由于您的 App 类 extends tornadofx.Appwhich again extends javafx.application.Application,您可以简单地将您的 JVM 指向该主类,它会运行得很好。如果您想显式启动 TornadoFX 应用程序,JavaFX 提供了一个launch您应该使用的静态方法。

启动 JavaFX 或 TornadoFX 应用程序的典型主函数是:

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

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

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

于 2017-08-21T12:27:22.270 回答
1

你可以这样开始:

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

launch函数在tornadofx包中定义为顶级函数,HelloWorldApp是一个随机Application类。

于 2018-02-12T23:26:51.010 回答