关于 kotlin:如何从启动器类启动 TornadoFX 应用程序

How to start a TornadoFX app from a launcher class

众所周知,对于较新版本的 javafx 应用程序,要使 fatjar 正确运行,启动应用程序的主类不能从 Application 类继承。简单的解决方法是创建一个调用主类的主要方法的启动器类。

我在使用 Kotlin 和 TornadoFX 时遇到了麻烦(两者都很新)。

我的示例应用程序是最小的:

1
class MyApp: App(MainView::class, Styles::class)

问题是如何从另一个启动器类开始这个类?


我认为最简单也可能是最好的方法是使用如下函数。

如果我们创建一个 Kotlin 文件 Launcher.kt 名称并不重要。

下面的内容

1
2
3
4
5
6
7
8
package my.app

class MyApp: App(MainView::class, Styles::class)

// stand alone function
fun main(args: Array<String>) {
launch<MyApp>(args)
}

那么主类名将是
mainClassName = 'my.app.MyAppKt'

现在我们有一个在 jar 清单中使用的主类声明,或者我们可以使用阴影插件来创建胖 jar,如下所示 Shadow JAR

注意这里的启动函数来自 tornadofx.App.kt


我所做的是把函数:

1
2
3
fun main(args: Array<String>) {
    launch<MyApp>(args)
}

在同一个文件中,但在 App 类之外。然后我让我的 IDE 和构建工具(在我的例子中是 Maven)指向这个文件。