尝试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()
}
}
Run Code Online (Sandbox Code Playgroud)
这与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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是Kotlin给出了一个错误:线程"main"中的异常java.lang.RuntimeException:无法构造Application实例:class Test
Ale*_*lov 49
您提供的代码示例不等效:Kotlin中的object
声明是单例,因此它只有一个实例通过在初始化类时调用私有构造函数构造.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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
jen*_*ert 32
class MyApplication : Application() {
override fun start(primaryStage: Stage) {
}
}
fun main(args: Array<String>) {
Application.launch(MyApplication::class.java, *args)
}
Run Code Online (Sandbox Code Playgroud)