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

时间:2017-08-21 12:15:29

标签: kotlin tornadofx

fun main(args: Array<String>) {

    HelloWorldApp().launch()
}

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:0)

你可以这样开始:

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

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