Котлин. Базовое приложение 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

Выбранные вами образцы кода не эквивалентны: объявление object в Kotlin является одноэлементным, поэтому он имеет только один экземпляр, созданный вызовом частного конструктора при инициализации класса. 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) } 
Intereting Posts
Сортировка строк по символу и длине Как рисовать линии с помощью drawLine () Ошибка Required Nothing при определении нулевой локальной переменной и ее установка позже в методе Kotlin: Как я могу назвать функцию расширения супер? Использование данных Amazon AWS Cognito `. Well-known / jwks.json` не позволяет base64 декодировать некоторые поля Kotlin: @JvmStatic метод NoClassDefFoundError / ClassNotFoundException во время модульного теста Ошибка подключаемого модуля Android kotlin Как показать только день и месяц в диалоговом окне выбора даты в Kotlin (Android)? Неопределенная ссылка в Android Studio 3 Canary Эквивалент Kotlin для массива классов c ++ Результат тот же, но тестовый пример не проходит в модульном тесте как интегрировать kotlin с node.js Kotlin – Расходы на более высокие порядки? Android Studio 3.0 Неразрешенная ссылка: Поддерживаемые языки для класса AIConfiguration в Dialogflow (api.ai) Имя частной собственности не соответствует регулярному выражению