JavaFX中FXMLLoader如何加载同项目子包内的FXML文件
问题核心原因&解决方法
1. 修正路径大小写
你项目中存放fxml的包名是首字母大写的Bird,你尝试的3种路径都用了小写bird作为开头,Java资源加载对大小写敏感,修改路径大小写即可正常加载,推荐使用绝对路径写法,不受当前类所在包位置影响:
Parent root = FXMLLoader.load(getClass().getResource("/Bird/bird.fxml"));
也可以使用类加载器的路径写法,不需要开头斜杠:
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Bird/bird.fxml"));
2. 确认资源文件被正确复制到输出目录
如果你的fxml文件放在源码目录(如src/main/java)下,Maven、Gradle等构建工具默认只会把.java编译后的class文件输出到classes目录,fxml这类资源文件会被直接忽略,可以通过两种方式解决:
- 方式一:把fxml文件移动到项目资源目录(一般为src/main/resources)下的Bird文件夹中,构建时会自动复制到输出路径
- 方式二:配置构建工具识别源码目录下的fxml文件,以Maven为例,在pom.xml的build节点添加如下配置:
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.fxml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources>
3. 检查FXML内的Controller配置
确认bird.fxml中的fx:controller属性填写的是全限定类名Bird.birdController,仅写类名会导致找不到Controller类报错。
内容的提问来源于stack exchange,提问作者angryduck
相关产品推荐
相关产品推荐

