应用程序构造函数中的 JavaFX 异常(未找到此类方法异常)

标签 java javafx runtime-error

我正在尝试将一个 swing UI 转换为 JavaFX UI,用于我正在为其编辑源代码的聊天系统,但在尝试运行该程序时出现错误。 这是我的主类:

public class Main extends Application{

    private Main() {

    }
    private static ArgumentParser argumentParser;
    private static Stage primaryStage;
    private static ArgumentResponder argumentResponder;
    private static UncaughtExceptionLogger uncaughtExceptionLogger;
    private static Settings settings;
    /**
     * The main method, for starting the application.
     *
     * <p>See {@link Argument} for the supported arguments.</p>
     *
     * @param args arguments given when starting KouChat.
     */
    public static void main(String[] args){

        argumentParser = new ArgumentParser(args);
        argumentResponder = new ArgumentResponder(argumentParser);

        if (!argumentResponder.respond()) {
            return;
        }

        new LogInitializer(argumentParser.hasArgument(Argument.DEBUG));
        // Initialize as early as possible to catch all exceptions
         uncaughtExceptionLogger = new UncaughtExceptionLogger();

         settings = loadSettings(argumentParser);

        launch(args);
    }
    private static Settings loadSettings(final ArgumentParser 
argumentParser) {
        final Settings settings = new Settings();

        final ArgumentSettingsLoader argumentSettingsLoader = new 
ArgumentSettingsLoader();
        argumentSettingsLoader.loadSettings(argumentParser, settings);

        final PropertyFileSettingsLoader propertyFileSettingsLoader = new 
PropertyFileSettingsLoader();
        propertyFileSettingsLoader.loadSettings(settings);

        return settings;
    }
    @Override
    public void start(Stage primaryStageObj) throws Exception{
        primaryStage = primaryStageObj;
        FXMLLoader loader = new FXMLLoader(getClass().getResource("ui/swing 
/Chat.fxml"));
        ChatController pls = new ChatController(argumentParser, settings, 
uncaughtExceptionLogger);
        loader.setController(pls);
        pls.setStage(primaryStage);
        Parent root = (Parent) loader.load();
        primaryStage.setTitle("Flake");
        primaryStage.setScene(new Scene(root, 959,583  ));
        primaryStage.setResizable(false);
        primaryStage.show();
        primaryStage.setResizable(false);
        primaryStage.setOnCloseRequest(e -> Platform.exit());


    }
}

这是我的 Controller :

public class ChatController {
    @FXML
    private TextArea messageBox;
    @FXML
    private Label onlineCountLbl;
    @FXML
    private ListView userList;
    @FXML
    private Button fileBtn;
    @FXML
    private Button sendBtn;
    @FXML
    private ScrollPane scrollPane;
    @FXML
    private ListView messageArea;


    private final UITools uiTools = new UITools();
    //private final User me;
    private Stage stage;

    private ListView<String> messageList;
    private UIFactory Flake;


    public ChatController() {
    }



    private boolean done;

    public ChatController(final ArgumentParser argumentParser,final Settings 
settings,final UncaughtExceptionLogger uncaughtExceptionLogger){
        Validate.notNull(argumentParser, "Argument parser can not be null");
        Validate.notNull(settings, "Settings can not be null");
        Validate.notNull(uncaughtExceptionLogger, "Uncaught exception logger 
can not be null");
        Flake = new UIFactory(scrollPane, userList, onlineCountLbl, 
messageBox, messageArea, argumentParser,settings, uncaughtExceptionLogger);



    }

    public void setStage(Stage stage){
        this.stage = stage;
    }

}

这是我的错误信息:

Exception in Application constructor
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class net.usikkert.kouchat.Main
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:907)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchMethodException: net.usikkert.kouchat.Main.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getConstructor(Class.java:1825)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$160(LauncherImpl.java:818)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    ... 1 more

我不知道如何解决这个问题,有没有办法使用 swing 使 UI 看起来更好,因为据我所见,网上的人都说我应该使用 JavaFX,因为它看起来比 JavaFX 好得多,也更容易使用 Swing 。

最佳答案

java.lang.NoSuchMethodException: package.Class.<init>()

当无法调用不带参数的构造函数时会发生此异常。大多数时候发生这种情况是因为没有提供参数的构造函数,在您的情况下,问题是构造函数是私有(private)的。

设置这条线

private Main() {

}

public Main() {

}

并且应该解决错误。

关于应用程序构造函数中的 JavaFX 异常(未找到此类方法异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49485351/

相关文章:

java - 如何将操作监听器添加到议程中的约会(JFXtras 议程)

ios - com.google.GCKError Code=2 连接到 ChromeCast 设备时

laravel - 在laravel中使用日志号显示生产模式下的错误

java - 使用 lambda 从 2 个现有对象创建新对象,总结 ArrayList 字段中各种对象的各种值

java - 如何在jHipster中配置Quartz作业? [在 jHipster 中配置 Quartz 作业时出现问题]

java - 在桌面应用程序 : in which layer? 中管理登录 session

c++ - 分配字符串时 char* new 和 delete [] 错误

Java 9.0 |类加载器::getResourceAsStream: NullPointerException

java - 带有图像 JavaFX 的 ListView

java - 如何在 JFXPanel 中执行模式文件选择器?