Котлин. Базовое приложение 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
Ответы
Ответ 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)
}
}
}
Ответ 4
У меня есть рабочий пример в моем репозитории github для OpenJFX 12 и Java 12.
https://github.com/SergeMerzliakov/javafx-app-1