Reputation: 375
Trying out Kotlin lang and I had an impression that it is compatible with Java and therefore with JavaFX and i tried following:
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()
}
}
this is basically same as Java's
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();
}
}
but Kotlin gives an error: Exception in thread "main" java.lang.RuntimeException: Unable to construct Application instance: class Test
Upvotes: 34
Views: 19218
Reputation: 703
Here is simple method to perform launch of Java FX Application
class MyApplication: Application(){
override fun start(primaryStage: Stage?){
//You code here
}
companion object{
@JvmStatic
fun main(args: Array<String>){
launch(MyApplication::class.java, *args)
}
}
}
Upvotes: 1
Reputation: 1609
class MyApplication : Application() {
override fun start(primaryStage: Stage) {
}
}
fun main(args: Array<String>) {
Application.launch(MyApplication::class.java, *args)
}
Upvotes: 44
Reputation: 32806
The code samples you provided are not equivalent: an object
declaration in Kotlin is a singleton, so it only has one instance constructed by calling the private constructor when the class is initialized. JavaFX is trying to call the constructor of the class reflectively but fails because the constructor is private as it should be.
What you may be looking instead is a simple class declaration, with the main
in its companion object. If no explicit constructors are declared, Kotlin, like Java, will generate a default one, allowing JavaFX to instantiate the application:
class Test : Application() {
override fun start(stage: Stage) {
...
}
companion object {
@JvmStatic
fun main(args: Array<String>) {
launch(Test::class.java)
}
}
}
Upvotes: 64