JavaFX中stage.getIcons().add(icon)无法添加窗口图标求助
解决JavaFX Stage图标不显示的问题
问题根源
你当前使用本地绝对路径加载图标,这种方式会因项目编译、运行环境的路径变化失效。src目录下的资源文件在编译后会被复制到编译输出目录,正确的做法是通过类路径加载资源。
修复步骤
1. 修改资源加载代码
替换原有的绝对路径加载方式,改用类路径读取资源:
// 非静态方法中使用 Image icon = new Image(getClass().getResourceAsStream("/java.png"), 64, 64, true, true);
如果是在静态方法内,用主类的Class对象获取资源:
// 替换YourMainClass为你的主类名 Image icon = new Image(YourMainClass.class.getResourceAsStream("/java.png"), 64, 64, true, true);
2. 配置IntelliJ IDEA资源目录
- 打开
File > Project Structure - 进入
Modules,选中你的项目模块,切换到Paths标签,确认编译输出路径(默认是out/production/[模块名])正确 - 切换到
Resources标签,确保src目录被标记为Resources Root(未标记的话,右键src目录选择Mark Directory as > Resources Root)
3. 验证资源编译情况
运行项目前,检查out/production/[模块名]目录下是否存在java.png文件,若没有则执行Build > Rebuild Project重新编译。
修复后的完整代码
public void start(Stage stage) throws Exception { Group root = new Group(); Scene scene = new Scene(root); // 类路径加载图标 Image icon = new Image(getClass().getResourceAsStream("/java.png"), 64, 64, true, true); stage.getIcons().add(icon); stage.setTitle("Stage demo program wooot"); stage.setScene(scene); stage.show(); }
额外提示
- 类路径对文件名大小写敏感,确保文件名和代码中的拼写完全一致
- 若使用Maven/Gradle构建项目,建议将资源文件放在
src/main/resources目录下,构建工具会自动处理资源复制
内容的提问来源于stack exchange,提问作者Ernesto Mendoza
相关产品推荐
相关产品推荐

