使用JavaFX时应用程序构造函数中出现异常

使用JavaFX时应用程序构造函数中出现异常,java,javafx,Java,Javafx,我最近开始学习JavaFX,并从一本使用JDK9的书中获得了这段代码。当我运行程序时,我遇到了错误。我查看了其他代码,并尝试将“@Override”和“throws Exception”添加到start方法中,但是我得到了相同的错误。我在构建程序时没有错误 如果有用的话:我正在使用JDK11.0.2和openjfx.io中的JavaFX import javafx.application.*; import javafx.scene.*; importjavafx.stage.*; import

我最近开始学习JavaFX,并从一本使用JDK9的书中获得了这段代码。当我运行程序时,我遇到了错误。我查看了其他代码,并尝试将“@Override”和“throws Exception”添加到start方法中,但是我得到了相同的错误。我在构建程序时没有错误

如果有用的话:我正在使用JDK11.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 constructor
Exception in thread "main" java.lang.reflect.InvocationTargetException
at 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 JavaFXSkel
at 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)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NoSuchMethodException: JavaFXSkel.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3350)
at java.base/java.lang.Class.getConstructor(Class.java:2152)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:801)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
应用程序构造函数中的异常 线程“main”java.lang.reflect.InvocationTargetException中出现异常 位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.base/java.lang.reflect.Method.invoke(Method.java:566) 位于java.base/sun.launcher.launchelper$FXHelper.main(launchelper.java:1051) 原因:java.lang.RuntimeException:无法构造应用程序实例:类JavaFXSkel 位于javafx.graphics/com.sun.javafx.application.LaunchImpl.launchApplication1(LaunchImpl.java:890) 在javafx.graphics/com.sun.javafx.application.LaunchImpl.lambda$launchApplication$2(LaunchImpl.java:195) 位于java.base/java.lang.Thread.run(Thread.java:834) 原因:java.lang.NoSuchMethodException:JavaFXSkel。() 位于java.base/java.lang.Class.getConstructor0(Class.java:3350) 位于java.base/java.lang.Class.getConstructor(Class.java:2152) 在javafx.graphics/com.sun.javafx.application.launchempl.lambda$launchApplication1$8(launchempl.java:801) 在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) 在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) 位于java.base/java.security.AccessController.doPrivileged(本机方法) 位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) 位于javafx.graphics/com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:96)
适用于我在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
此网页有助于:

下面是正在运行的应用程序的屏幕截图


您的
JavaFXSkel
类必须是
public
,如以下文档所述:

应用程序
子类必须声明为public,并且必须具有public无参数构造函数

JavaFX运行时使用反射实例化
应用程序
子类的实例。它通过使用类的public no arg构造函数来实现这一点。但是,您的
JavaFXSkel
类没有显式声明任何构造函数,这意味着它具有隐式默认构造函数。默认构造函数与封闭类具有相同的访问修饰符,在您的情况下,这是默认的包访问。这在Java语言规范的第1部分中提到:

如果类不包含构造函数声明,则隐式声明默认构造函数。顶级类、成员类或本地类的默认构造函数的形式如下所示:

  • 默认构造函数与类具有相同的访问修饰符,除非类缺少访问修饰符,在这种情况下,默认构造函数具有包访问()

  • 默认构造函数没有形式参数,除了在非
    private
    内部成员类中,默认构造函数隐式声明一个形式参数,表示类(,)的直接封闭实例

这意味着您的
JavaFXSkel
没有公共的no-arg构造函数,因此
NoSuchMethodException



一,。不要期望初学者读过很多JLS(如果有的话);我只是提供它作为官方参考。

您对应用程序的依赖性似乎存在冲突。您正在使用某种工具进行依赖关系管理吗?尝试在
start()
init()
上同时抛出
@Override
抛出异常
,添加
@Override
抛出异常
无效。至于依赖关系管理,我没有使用任何工具。如果有帮助的话,我正在使用IntellijYour3rdImport看起来很可疑<代码>importjavafx.stage.*@SAIFULHAQUE检查此链接