JavaFX - ошибка при использовании функции load () FXML - PullRequest
0 голосов
/ 11 сентября 2018

Я делаю свой первый проект с использованием JavaFX и столкнулся с ошибкой. После некоторого поиска с использованием print и разбиения первой строки метода ниже на более мелкие операторы я обнаружил, что ошибка была вызвана методом load ().

public Scene generateTodayGUI() throws Exception
{
    Parent root = FXMLLoader.load(getClass().getResource("../fxml/TodayScene.fxml"));

    todayScene = new Scene(root, 450, 600);

    return todayScene;
}

Я попытался распечатать информацию об исключении, и оно дало мне место, где произошла ошибка. Он расположен в 9-й строке файла FXML, который должен загружаться описанным выше методом. Ниже приведена полная строка кода, которая генерирует ошибку.

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.TodayGUI">

Я проверил, что класс контроллера указан правильно, и, поскольку я активно искал решение своей проблемы, обнаружил, что у некоторых людей были проблемы с "xmlns", таким образом, я предполагаю, что это проблема и здесь , И снова, после нескольких часов царапин на голове, ни одно из решений, которые работали для других, не сработало для меня, и здесь я прошу StackOverflow о помощи.

Спасибо за продвижение!

PS: я использую IntelliJ IDEA

Редактировать: исключение имеет тип javafx.fxml.LoadException, сообщение об ошибке ничего не говорит. А вот и трассировка стека:

        at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625)
        at javafx.fxml/javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:105)
        at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:941)
        at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:980)
        at javafx.fxml/javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:227)
        at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:752)
        at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3253)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3210)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3129)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3122)
        at gui.TodayGUI.generateTodayGUI(TodayGUI.java:44)
        at gui.MainGUI.initSubMenus(MainGUI.java:84)
        at gui.MainGUI.<init>(MainGUI.java:47)
        at core.Main.start(Main.java:38)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
        at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.InstantiationException: gui.TodayGUI 
        at java.base/java.lang.Class.newInstance(Class.java:547) 
        at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:936) 
        ... 25 more 
Caused by: java.lang.NoSuchMethodException: gui.TodayGUI.() 
        at java.base/java.lang.Class.getConstructor0(Class.java:3302) 
        at java.base/java.lang.Class.newInstance(Class.java:532)
        ... 26 more

Редактировать 2: Вот класс TodayGUI. Я не включаю импорт, потому что знаю, что он не вызывает эту ошибку.

package gui;

Вот объявление класса

public class TodayGUI implements Initializable

Атрибуты

public Stage window;
public Day day;
public Boolean isSaved;
public ChoiceBox<String> choiceBox;
public TableView<Meal> meals;
public TableColumn<Meal, String> mealDescriptionColumn, mealTypeColumn;
public ListView<String> exercisesList;
public TextField mealDescription, exerciseDescription, sleepHours, sleepMins;
public Scene mainScene;
public Scene todayScene;
public LinkedList<Meal> food;
public LinkedList<Meal> exercises;
public int hoursSleep, minutesSleep;

И конструктор

public TodayGUI(Stage newStage, Day newDay, Scene newMainScene)
{
    this.day = newDay;
    this.window = newStage;
    this.mainScene = newMainScene;
}

Я также хотел бы поблагодарить всех, кто ответил до сих пор.

...