尝试了 Kotlin lang,我的印象是它与 Java 兼容,因此与 JavaFX 兼容,我尝试了以下操作:
public object TestKt: Application() {
public override fun start(stage: Stage){
val pane= Pane()
val scene=Scene(pane,200.0,200.0)
stage.scene = scene
stage.show()
}
@JvmStatic public fun main(args: Array<String>){
launch()
}
}
这与Java基本相同
public class Test extends Application {
@Override
public void start(Stage stage) {
Pane pane=new Pane();
Scene scene=new Scene(pane, 200,200);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args){
launch();
}
}
但 Kotlin 给出错误: Exception in thread "main" java.lang.RuntimeException: Unable to Construction Application instance: class Test
您提供的代码示例并不等效:object宣言 https://kotlinlang.org/docs/reference/object-declarations.html#object-declarationsKotlin 中是单例,因此在类初始化时只有一个通过调用私有构造函数构造的实例。 JavaFX 试图反射性地调用类的构造函数,但失败了,因为构造函数应该是私有的。
您可能会看到一个简单的类声明,其中包含main
in its 伴生对象 https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects。如果没有声明显式构造函数,Kotlin 会像 Java 一样生成一个默认构造函数,从而允许 JavaFX 实例化应用程序:
class Test : Application() {
override fun start(stage: Stage) {
...
}
companion object {
@JvmStatic
fun main(args: Array<String>) {
launch(Test::class.java)
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)