Java Fx文件位置异常

Java Fx文件位置异常,java,maven,javafx,Java,Maven,Javafx,你好,我是JavaFx新手。我已经为我的JavaFx项目创建了一个Maven项目。 我正在尝试加载第一个.fxml文件,但是遇到了上述异常。我试过几件事,但总是兜圈子。获取以下异常: java.lang.NullPointerException:需要位置。 控制器类 public class HomeScreenController extends Application { @FXML private Button ProjectProp; @FXML pr

你好,我是JavaFx新手。我已经为我的JavaFx项目创建了一个Maven项目。 我正在尝试加载第一个.fxml文件,但是遇到了上述异常。我试过几件事,但总是兜圈子。获取以下异常:
java.lang.NullPointerException:需要位置。

控制器类

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>


您是否尝试在文件名(包括文件结构)中添加正斜杠

Parent root = FXMLLoader.load(getClass().getResource("/com/thales/homescreen.fxml"));
我不太熟悉您正在使用的IDE,但我认为它可以在参考资料中找到,但如果您嵌套文件,则需要指定在何处找到它。另外,看看我自己的项目,我总是有一个属性文件,它与fxml位于同一个文件夹中。例如,我的上一个项目是这样的

private static final String LAYOUT\u RESOURCE=“imsort.fxml”;
私有静态最终字符串资源\u BUNDLE=“strings”;
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
ClassLoader ClassLoader=getClass().getClassLoader();
ResourceBundle=ResourceBundle.getBundle(资源\u bundle);
FXMLLoader FXMLLoader=新的FXMLLoader(classLoader.getResource(布局资源),bundle);
父根=fxmloader.load();
场景=新场景(根);
stage.setresizeable(true);
舞台场景;
stage.sizeToScene();
stage.show();
设置阶段(阶段、根);
}

如果您没有任何属性,可以创建一个名为“strings.properties”的空文件,将其放置在与.fxml相同的位置。资源的Java代码和路径看起来是正确的,因此您的安装和/或构建过程有问题

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


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

作为旁白,将同一类用作
应用程序
子类和控制器是一个坏主意。我很确定这不会引起问题,但它会造成很多混乱:您最终会得到该类的两个实例,而
@FXML
-注入的字段只在其中一个字段中初始化。非常感谢!在您第一次将其作为标准Java项目发表评论之后,我就直接对其进行了测试。我是配置Maven的新手,所以这对我有很大帮助!它现在起作用了:)