Kotlin。 基本的JavaFX应用程序

尝试Kotlin朗,我有一个印象,它与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给出了一个错误:线程“main”中的异常java.lang.RuntimeException:无法构造应用程序实例:class Test

您提供的代码示例并不等同:Kotlin中的object声明是单例,因此只有在初始化类时通过调用私有构造函数构造了一个实例。 JavaFX试图调用该类的构造函数反射,但失败,因为构造函数是私人的,应该是。

你可能会看到的是一个简单的类声明, main在它的伴侣对象中 。 如果没有声明明确的构造函数,Kotlin就像Java一样会生成一个默认的构造函数,允许JavaFX实例化应用程序:

 class Test : Application() { override fun start(stage: Stage) { ... } companion object { @JvmStatic fun main(args: Array<String>) { launch(Test::class.java) } } } 
 class MyApplication : Application() { override fun start(primaryStage: Stage) { } } fun main(args: Array<String>) { Application.launch(MyApplication::class.java, *args) }