我最近開始學習 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
提交
取消