Maven + Java FX 路径错误以及配置详解
参考StackOverflow
报错:Caused by: java.lang.NullPointerException: Location is required.
原因:这种错误原因在于路径问题,说明这句话没有找到对应的fxml文件
FXMLLoader connectLoader = new FXMLLoader(getClass().getResource("/ui/ftpClient/client/fxml/loginMain.fxml"));
为什么找不到这个资源呢?明明路径没错啊!
通过这条语句,我们可以看下路径到底在哪里?
// 查看目录
System.out.println(getClass().getResource("/"));
得到目录之后,你再去看看该目录里面是否有fxml 文件,如果有,看看你之前的路径哪里错了,如果没有,那是因为maven在编译过程中忽略了.fxml文件
可以进行如下配置:(这样编译过程就包含了src/main/java
目录下的fxml文件了
<build>
...
<resources>
<resource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes>
<include>**/*.fxml</include>
</includes>
</resource>
</resources>
...
</build>
我的解决方法
方法一
根据前面这条语句:
// 查看目录
System.out.println(getClass().getResource("/"));
修改new FXMLLoader(getClass().getResource("/ui/ftpClient/client/fxml/loginMain.fxml"));
的目录即可,使得该目录下有fxml文件
方法二
问题来了,我参照StackOverflow上的配置完成后依旧报错!
项目背景:我的JavaFx 项目是项目中的一部分,也就是说在主目录下只有某一个文件夹是我的项目目录。
经过漫长的尝试,我终于解决了:
-
在IDEA中打开Project Structrue,点击左边的module
上图可以看出:第一个即是我整个项目的主目录,我的JavaFx仅仅是主目录下的一个子目录,此时我们要点击那个加号。 -
选择Import Module
- 选择我的子目录,如下图:
- 完成后就是我这个样子,记得设置Source和Out(如下图,这里就不说啦)
然后终于成功了!