我最近开始学习 JavaFX,并从一本使用 JDK 9 的书中获得了这段代码。当我运行该程序时,我遇到了错误。我查看了其他代码并尝试在启动方法中添加“@Override”和“抛出异常”,但是我得到了同样的错误。构建程序时我没有收到任何错误。如果有帮助:我正在使用 JDK 11.0.2 和来自 openjfx.io 的 JavaFX。import javafx.application.*;import javafx.scene.*;importjavafx.stage.*;import javafx.scene.layout.*;class JavaFXSkel extends Application{public static void main(String[] args){ System.out.println("Launching JavaFX Application"); launch(args);}public void init(){ System.out.println("Inside the init() method");}public void start(Stage myStage){ System.out.println("Inside the start() method"); myStage.setTitle("JavaFX Skeleton"); //makes a root node with a flow layout pane FlowPane rootNode = new FlowPane(); //Crate a scne Scene myScene = new Scene(rootNode, 300, 200); //Set teh scene on stage myStage.setScene(myScene); //Show the stage and the scene myStage.show();}public void stop(){ System.out.println("Inside the stop() method");}}错误信息:Exception in Application constructorException in thread "main" java.lang.reflect.InvocationTargetExceptionat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:566)at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)Caused by: java.lang.RuntimeException: Unable to construct Application instance: class JavaFXSkelat javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:890)at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
2 回答

慕虎7371278
TA贡献1802条经验 获得超4个赞
您的JavaFXSkel
班级必须是public
,如以下文档中所述Application
:
Application
子类必须声明为公共的,并且必须有一个公共的无参数构造函数。
Application
JavaFX 运行时使用反射实例化您的子类的一个实例。它通过使用类的公共无参数构造函数来做到这一点。但是,您的JavaFXSkel
类没有显式声明任何构造函数,这意味着它具有隐式默认构造函数。默认构造函数具有与封闭类相同的访问修饰符,在您的情况下,这是默认的包访问。Java 语言规范1的§8.8.9中提到了这一点:
如果类不包含构造函数声明,则隐式声明默认构造函数。顶级类、成员类或本地类的默认构造函数形式如下:
这意味着您JavaFXSkel
没有公共的无参数构造函数,因此NoSuchMethodException
.
1. 不要指望初学者读过很多 JLS(如果有的话);我只是提供它作为官方参考。

Cats萌萌
TA贡献1805条经验 获得超9个赞
在 Windows 10 上使用 JDK 11.0.2 工具为我工作。对源代码进行了一项更改:
public class JavaFXSkel
将您的代码保存在名为“JavaFXSkel.java”的文件中
使用以下命令编译代码。
javac --module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls -g JavaFXSkel.java
使用以下命令运行程序:
java --module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls JavaFXSkel
这个网页有帮助:https ://openjfx.io/openjfx-docs/
这是正在运行的应用程序的屏幕截图。
添加回答
举报
0/150
提交
取消