科特林。基本的JavaFX应用程序

时间:2016-01-16 23:20:19

标签: javafx kotlin

尝试使用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给出了一个错误:线程&#34; main&#34; java.lang.RuntimeException:无法构造Application实例:class Test

3 个答案:

答案 0 :(得分:44)

您提供的代码示例并不等效:Kotlin中的object declaration是一个单例,因此在初始化类时只调用私有构造函数构建一个实例。 JavaFX试图反射性地调用类的构造函数但是因为构造函数应该是私有的而失败。

您可能正在寻找的是一个简单的类声明,其companion object中包含main。如果没有声明显式构造函数,Kotlin将像Java一样生成一个默认构造函数,允许JavaFX实例化应用程序:

class Test : Application() {
    override fun start(stage: Stage) {
        ...
    }

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            launch(Test::class.java)
        }
    }
}

答案 1 :(得分:31)

class MyApplication : Application() {

   override fun start(primaryStage: Stage) {

   }
}

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

答案 2 :(得分:1)

这是执行Java FX应用程序启动的简单方法

class MyApplication: Application(){
    override fun start(primaryStage: Stage?){
        //You code here
    }

    companion object{
        @JvmStatic
        fun main(args: Array<String>){
            launch(MyApplication::class.java, *args)
        }
    }
}