Подтвердить что ты не робот

Котлин. Базовое приложение JavaFX

Попробовав 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 дает сообщение об ошибке: Исключение в потоке "main" java.lang.RuntimeException: Невозможно построить экземпляр приложения: class Test

4b9b3361

Ответ 1

Выбранные вами примеры кода не эквивалентны: объявление object в Kotlin является одноэлементным, поэтому он имеет только один экземпляр, созданный вызовом частного конструктора, когда класс инициализируется. JavaFX пытается вызвать конструктор класса рефлексивно, но терпит неудачу, потому что конструктор является закрытым, как и должно быть.

Вместо этого вы можете найти простое объявление класса с main в

Ответ 2

class MyApplication : Application() {

   override fun start(primaryStage: Stage) {

   }
}

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

Ответ 3

Вот простой способ выполнить приложение 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)
        }
    }
}