本文介绍了试图从 Java 调用 JavaFX 应用程序... NoSuchMethodException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个主类,它应该调用 JavaFX 应用程序 (SimpleSun) 从用户那里获取信息.目前我创建了一个 JavaFX 类的对象并启动它,但这似乎不起作用.有人看到我工作中的错误吗?

I have a main class which should call a JavaFX application (SimpleSun) to get Information from the user. Currently I create an Object of the JavaFX class and start it, but that doesn't seem to work. Does someone see the mistake in my work?

这是我的代码和异常:Main.java:

Here's my code and exception:Main.java:

package ch.i4ds.stix.sim;

import ch.i4ds.stix.sim.grid.config.Configuration;
import ch.i4ds.stix.sim.grid.config.ConfigurationFromFile;


    public class Main{
    Configuration config;
    public static void main(String[] args) {
        ConfigurationFromFile config = new ConfigurationFromFile();
        SimpleSun ss = new SimpleSun(config);
        ss.show();
    }
}

SimpleSun.java:

SimpleSun.java:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import ch.i4ds.stix.sim.grid.config.Configuration;
import ch.i4ds.stix.sim.grid.config.ConfigurationFromFile;

public class SimpleSun extends Application{

    private Stage primaryStage;
    Configuration configuration;

    public SimpleSun(ConfigurationFromFile config) {
        this.configuration = config;
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle("Simple Sun - Alpha");
        System.out.println("Test");
        try {
            // Load the root layout from the fxml file
            FXMLLoader loader = new FXMLLoader(
                    Main.class.getResource("view/RootLayout.fxml"));
            BorderPane rootLayout = (BorderPane) loader.load();
            Scene scene = new Scene(rootLayout);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (IOException e) {
            // Exception gets thrown if the fxml file could not be loaded
            e.printStackTrace();
        }
    }

    public void show(){
        launch();
    }

}

异常:

Exception in Application constructor
Exception in thread "main" java.lang.RuntimeException: Unable to construct Application instance: class ch.i4ds.stix.sim.SimpleSun
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoSuchMethodException: ch.i4ds.stix.sim.SimpleSun.<init>()
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getConstructor(Unknown Source)
    ... 4 more

推荐答案

在扩展应用程序时,您必须提供一个不带参数的构造函数.所以你可以这样做:

You must provide a constructor with no arguments when you extend application. So you could do something like:

public class SimpleSun extends Application {

    private Stage primaryStage;
    Configuration configuration;

    public SimpleSun() {
        this.configuration = Main.getConfig();
    }
    //...

在你的 Main 类中:

public static Configuration getConfig() { return new ConfigurationFromFile(); }

或者,您可以使用 launch(args)String 参数传递给类,并使用 将它们返回到 SimpleSun 类中getParameters().

Alternatively you can pass String parameters to the class with launch(args) and get them back in the SimpleSun class with getParameters().

这篇关于试图从 Java 调用 JavaFX 应用程序... NoSuchMethodException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 15:40