【问题标题】:Java Fx File Location ExceptionJava Fx 文件位置异常
【发布时间】:2020-02-24 16:17:22
【问题描述】:

您好,我是 JavaFx 的新手。我为我的 JavaFx 项目 创建了一个 Maven 项目。 我正在尝试加载第一个 .fxml 文件,但是我遇到了上述异常。我已经尝试了一些事情,但我只是继续兜圈子。得到以下异常: java.lang.NullPointerException: Location is required.

控制器类

public class HomeScreenController extends Application {

    @FXML
    private Button ProjectProp;

    @FXML
    private Button Tech;

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("homescreen.fxml"));
        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

.fxml 文件

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

    <?import javafx.scene.control.Button?>
    <?import javafx.scene.layout.AnchorPane?>

    <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.thales.HomeScreenController">
       <children>
          <Button fx:id="projectProp" layoutX="46.0" layoutY="38.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="145.0" text="Project Properties" />
          <Button fx:id="tech" layoutX="46.0" layoutY="114.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="145.0" text="Technologies" />
       </children>
    </AnchorPane>

结构

【问题讨论】:

  • 顺便说一句,使用与Application 子类和控制器相同的类是个坏主意。我很确定这不会导致问题,但它会造成很多混乱:您最终得到了该类的两个实例,而 @FXML-injected 字段仅在其中一个中初始化。

标签: java maven javafx


【解决方案1】:

资源的 Java 代码和路径看起来正确,因此您的设置和/或构建过程有问题。

从您的屏幕截图中,您似乎在src/main/resources 源文件夹中创建了一个名为org.thales文件夹。您需要的是一个名为org.thales。您可以使用文件浏览器并查看构建文件夹(在 Maven 中默认为target/classes)来检查这一点。在那里你应该有一个org 目录和一个thales 子目录,它应该包含你所有的类文件和FXML 文件。我怀疑你会找到一个 org.thales 目录,其中包含 FXML 文件。

在eclipse的左窗格中右击src/main/resources,选择“New”,然后选择“Package”,输入org.thales作为包名。然后将 FXML 文件(您可以将它们拖放到左侧的 Eclipse 窗格中)移动到包中。那应该可以解决问题。 (您也可以通过删除org.thales 文件夹来清理,该文件夹现在应该是空的。)

【讨论】:

  • 非常感谢!在您第一次将其评论为标准 Java 项目后,我直接对其进行了测试。我是配置 Maven 的新手,所以这有很大帮助!它现在可以工作了:)
【解决方案2】:

您是否尝试在包含文件结构的文件名中添加正斜杠?

Parent root = FXMLLoader.load(getClass().getResource("/com/thales/homescreen.fxml"));

我对您使用的 IDE 不太熟悉,但我认为它在资源中查找,但如果您嵌套文件,则需要指定在哪里找到它。另外查看我自己的项目,我总是有一个属性文件,它与 fxml 位于同一文件夹中,例如我的上一个项目是这样的

  private static final String LAYOUT_RESOURCE = "imsort.fxml";
  private static final String RESOURCE_BUNDLE = "strings";


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

  @Override
  public void start(Stage stage) throws Exception {
    ClassLoader classLoader = getClass().getClassLoader();
    ResourceBundle bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE);
    FXMLLoader fxmlLoader = new FXMLLoader(classLoader.getResource(LAYOUT_RESOURCE), bundle);
    Parent root = fxmlLoader.load();
    Scene scene = new Scene(root);
    stage.setResizable(true);
    stage.setScene(scene);
    stage.sizeToScene();
    stage.show();
    setStageSize(stage, root);
}

如果您没有任何属性,您可以创建一个名为“strings.properties”的空文件,将其放在与 .fxml 相同的位置

【讨论】:

    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2017-08-02
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多