JavaFX中的FXMLLoader导入fxml文件时报错?InvocationTargetException?别慌,手把手教你解决

本文介绍了在使用JavaFX的FXMLLoader加载FXML文件时遇到的问题及解决方法。问题出现在尝试加载位于错误目录的FXML文件,导致IDEA未能将其包含在构建路径中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写了个JavaFX应用。结果在FXMLoader的load方法时报错了。报错信息大概是这样的

再看一眼代码。报错的地方正是loader.load

 这里的代码写在了Gui类中。而start.fxml与Gui类处于同一包下。按理来说不应该有问题。于是我检查了IDEA的构建生成

原来如此。IDEA根本没给你生成start.fxml。导致在load的时候找不到fxml文件。进而报错。由于FXMLLoader的构造器参数是个URL,因此在报错时并不会指出找不到fxml文件。这里实际上传进去的参数为null。因为Gui.class.getResource返回的URL为null(虚拟机找不到fxml文件)。

那么,解决问题的方法非常简单。首先我们要知道为什么IDEA没有给你在target里生成fxml文件。这是因为在项目里,我把fxml文件放在了src目录下,而不是resources资源目录下。而IDEA判断这个文件是否属于资源文件只看它在不在resources资源目录下,如果不在,不好意思,IDEA会把这个后缀非.java的文件当作废纸。这就是为啥target里没有fxml文件。那么,只要把fxml文件移动到resources资源根下就好了。

这里又有一个坑。请注意,如果你只是单纯新建了一个目录并把它重命名为resources是p用没有的。那么该怎么做呢?首先,找一块“风水宝地”用来存放你的resources目录。比如我想把这个resources目录直接放到项目目录下,这是可以的。但是有几个地方你不能放。比如项目以外以及项目代码目录内等等。OK,假设你准备把resources放在项目目录下,好,接下来,右键你的项目目录

可以看到它弹出来了一个窗口,接下来,依次选择New(新建),Directory(目录),如下图所示

 

 接着,点击Directory(目录),输入resources

 回车 ,可以看到在项目根目录下生成了一个目录resources,以后这里就是你存放应用资源的地方了。

 

接着,右键你的resources,往下找,找到Mark Directory as(将目录标记为),找到Resources Root(资源根),如下图所示

 当你发现这个resources目录的图标变得不一样了之后,就说明你成功了

接下来,你只需要将fxml文件移动到resources里面,再次编译运行,就OK了。

觉得有用就点个赞吧,嘿嘿。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值