Scene Builder与getResource返回错误路径,为何查找out/production目录?
问题原因
- IntelliJ 编译项目时,会将 src 目录下的 Java 文件编译输出到
out/production目录,但非 Java 资源文件(如 .css、.fxml)需要手动配置才能被同步到编译目录。你的entry.fxml能被找到,说明它已被正确复制,但choicebox.css未被同步,导致系统在out/production目录中找不到该文件。 getClass().getResource()方法是从编译后的类路径中查找资源,而非原始的 src 目录,所以会定位到out/production下的路径。
解决方法
1. 配置资源目录,让IntelliJ自动同步CSS文件
- 打开 IntelliJ,按快捷键
Ctrl+Alt+Shift+S打开「Project Structure」窗口 - 切换到「Modules」→「Sources」标签页
- 找到你的 CSS 文件所在的目录(比如
src/gui),右键点击该目录,选择「Mark Directory as > Resources Root」 - 点击「Apply」和「OK」保存配置,之后编译项目时,IntelliJ 会自动将该目录下的非 Java 文件复制到
out/production对应路径中。
2. 使用正确的相对路径引用CSS
在FXML文件中引用
如果 CSS 和 FXML 位于同一目录,可使用以下两种方式:
<!-- 相对于当前FXML文件的路径 --> <stylesheets> <URL value="@choicebox.css" /> </stylesheets>
或者
<!-- 从类根目录开始的绝对类路径 --> <stylesheets> <URL value="classpath:/gui/choicebox.css" /> </stylesheets>
在Java代码中引用
// 从类根目录开始查找,注意开头的斜杠 getClass().getResource("/gui/choicebox.css");
3. 验证配置生效
执行「Build > Rebuild Project」重新编译项目,查看 out/production/DiamondCircle/gui 目录下是否存在 choicebox.css,若存在则配置生效。
内容的提问来源于stack exchange,提问作者qu4lizz
相关产品推荐
相关产品推荐

