我正在使用JavaFX进行第一个项目,遇到错误。在使用打印进行搜索并将以下方法的第一行拆分为较小的语句后,我发现该错误是由load()方法引起的。
public Scene generateTodayGUI() throws Exception
{
Parent root = FXMLLoader.load(getClass().getResource("../fxml/TodayScene.fxml"));
todayScene = new Scene(root, 450, 600);
return todayScene;
}
我尝试打印有关异常的信息,它使我可以确定发生错误的位置。该方法应位于FXML文件的第9行。下面是产生错误的完整代码行。
<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;
}
我还要感谢到目前为止回答的每个人。