有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

maven Java Fx文件位置异常

你好,我是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>

结构

enter image description here


共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 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