首页 > 解决方案 > javafx.fxml.LoadException - ?

问题描述

我是 JavaFX 的新手,正在尝试使用 SceneBuilder 在我已经构建的 Java 库存代码中实现它。我收到以下错误,我不确定如何解决。通过异常我能理解的是无法定位到fxml文件,但是不知道为什么会这样。这是异常输出:

    Mar 15, 2020 2:34:16 AM javafx.fxml.FXMLLoader$ValueElement processValue
    WARNING: Loading FXML document with JavaFX API of version 11.0.1 by JavaFX runtime of version 10.0.2
    button to open ADD window is clicked.
    Mar 15, 2020 2:34:25 AM javafx.fxml.FXMLLoader$ValueElement processValue
    WARNING: Loading FXML document with JavaFX API of version 11.0.1 by JavaFX runtime of version 10.0.2
    javafx.fxml.LoadException: 
    /C:/Users/jjjas/Desktop/my_java_work/Jeet_Simran_COMP228_Lab4/bin/AddBagel.fxml

        at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2603)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
        at application.MainController.addBagel(MainController.java:27)
        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:564)
        at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
        at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:275)
        at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
        at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1782)
        at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
        at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
        at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
        at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
        at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8865)
        at javafx.controls/javafx.scene.control.Button.fire(Button.java:200)
        at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
        at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
        at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
        at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
        at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
        at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
        at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3876)
        at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1300(Scene.java:3604)
        at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1874)
        at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2613)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
        at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
        at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
        at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
        at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
        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.NullPointerException
        at application.BagelController.initialize(BagelController.java:122)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
        ... 61 more

FXML 文件:AddBagel.fxml

    <?xml version="1.0" encoding="UTF-8"?>

    <?import javafx.geometry.Insets?>
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.CheckBox?>
    <?import javafx.scene.control.Label?>
    <?import javafx.scene.layout.AnchorPane?>
    <?import javafx.scene.layout.HBox?>
    <?import javafx.scene.text.Font?>


    <AnchorPane prefHeight="332.0" prefWidth="367.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1" fx:controller="application.BagelController">
       <children>
          <Label alignment="CENTER" prefHeight="88.0" prefWidth="367.0" style="-fx-background-color: RED;" text="ADD BAGEL NAME TO BE ADDED IN THE INVENTORY" textFill="#f5f3f3">
             <font>
                <Font name="Segoe Script Bold" size="14.0" />
             </font>
          </Label>
          <HBox layoutX="25.0" layoutY="88.0" prefHeight="59.0" prefWidth="332.0" spacing="95.0">
             <padding>
                <Insets top="30.0" />
             </padding>
             <children>
                <CheckBox fx:id="cinnamonCheckBox" mnemonicParsing="false" prefHeight="29.0" prefWidth="121.0" text="Cinnamon" textFill="#f72929">
                   <font>
                      <Font name="Segoe Script Bold" size="15.0" />
                   </font>
                </CheckBox>
                <CheckBox fx:id="natureCheckBox" layoutX="10.0" layoutY="40.0" mnemonicParsing="false" prefHeight="29.0" prefWidth="92.0" text="Nature" textFill="#f72929">
                   <font>
                      <Font name="Segoe Script Bold" size="15.0" />
                   </font>
                </CheckBox>
             </children>
          </HBox>
          <HBox layoutX="25.0" layoutY="145.0" prefHeight="59.0" prefWidth="332.0" spacing="100.0">
             <padding>
                <Insets top="30.0" />
             </padding>
             <children>
                <CheckBox fx:id="blueberryCheckBox" mnemonicParsing="false" prefHeight="27.0" prefWidth="117.0" text="Blueberry" textFill="#f72929">
                   <font>
                      <Font name="Segoe Script Bold" size="15.0" />
                   </font>
                </CheckBox>
                <CheckBox fx:id="cinnamonCheckBox11" layoutX="10.0" layoutY="40.0" mnemonicParsing="false" prefHeight="29.0" prefWidth="92.0" text="Nature" textFill="#f72929">
                   <font>
                      <Font name="Segoe Script Bold" size="15.0" />
                   </font>
                </CheckBox>
             </children>
          </HBox>
          <HBox layoutX="27.0" layoutY="217.0" prefHeight="59.0" prefWidth="313.0" spacing="80.0">
             <padding>
                <Insets left="20.0" right="20.0" top="10.0" />
             </padding>
             <children>
                <Button mnemonicParsing="false" onAction="#bagelNameToBeAdded" prefHeight="40.0" prefWidth="130.0" style="-fx-background-color: yellow;" text="SAVE" textFill="#ee2525">
                   <font>
                      <Font name="Segoe Script Bold" size="13.0" />
                   </font>
                </Button>
                <Button layoutX="30.0" layoutY="20.0" mnemonicParsing="false" onAction="#bagelNameToBeAdded" prefHeight="40.0" prefWidth="130.0" style="-fx-background-color: yellow;" text="CANCEL" textFill="#ee2525">
                   <font>
                      <Font name="Segoe Script Bold" size="13.0" />
                   </font>
                </Button>
             </children>
          </HBox>
          <Label layoutX="47.0" layoutY="285.0" prefHeight="29.0" prefWidth="272.0" textFill="#f02222">
             <font>
                <Font name="Segoe Script Bold" size="13.0" />
             </font>
          </Label>
       </children>
    </AnchorPane>

主类:

    package application;

    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.stage.Stage;
    import javafx.scene.Parent;
    import javafx.scene.Scene;


    public class Main extends Application {
        @Override
        public void start(Stage primaryStage) {
            try {
                primaryStage.setTitle("TIM HORTONS");
                String fxmlFileName = "../MainWindow.fxml";
                Parent root = FXMLLoader.load(getClass().getResource(fxmlFileName));
                Scene scene = new Scene(root);

                primaryStage.setScene(scene);
                primaryStage.show();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public static void main(String[] args) {
            launch(args);
        }
    }

主控制器类:

    package application;

    import java.io.IOException;
    import java.net.URL;
    import java.util.ResourceBundle;

    import ex2_database.Inventory;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.fxml.Initializable;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;

    public class MainController implements Initializable{

        Inventory inventory = new Inventory();

        @FXML
        private void addBagel(ActionEvent event) {
            System.out.println("button to open ADD window is clicked.");
            try {
                Stage stage = new Stage();
                String fxmlFileName = "../AddBagel.fxml";
                FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlFileName));
                Parent root = loader.load();

                Scene scene = new Scene(root);
                stage.setScene(scene);

                BagelController bagelController = loader.<BagelController>getController();
                bagelController.populateBagel(inventory);
                stage.show();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        @Override
        public void initialize(URL location, ResourceBundle resources) {        
        }

    }

标签: javafx

解决方案


推荐阅读