使用JavaFX时图片无法显示的问题求助(IntelliJ环境)
IntelliJ下JavaFX图片加载失败问题
- 运行程序时因找不到图片文件报错
- 此前图片区域显示空白,尝试多种方案无效,按他人建议修改后反而触发报错
项目资源目录说明:图片CheskePic.png放置在src/main/resources目录下(参考提供的Library截图结构)。
相关代码
package GUI; import javafx.application.Application; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.stage.Stage; import javafx.scene.layout.VBox; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import java.util.Objects; public class GameGUI extends Application{ @Override public void start(Stage primaryStage) { // Cheske Pic // 原路径写法错误,导致找不到资源 Image cheske = new Image(getClass().getResourceAsStream("src/main/resources/CheskePic.png")); ImageView cheskePic = new ImageView(cheske); cheskePic.setFitHeight(200); cheskePic.setFitWidth(200); // Choose Pieces Button Button Pieces = new Button("Choose Your Pieces"); Pieces.setOnAction(e -> { // Edit the 2-D Array }); // Start Game Button Button Start = new Button("Start"); Start.setOnAction(e -> { // BoardGUI.show(); }); // Quit Game Button Button Quit = new Button("Quit"); Quit.setOnAction(e -> { primaryStage.close(); }); // 布局设置 VBox layout = new VBox(10); layout.getChildren().addAll(cheskePic,Pieces,Start,Quit); layout.setAlignment(Pos.CENTER); // 场景设置 Scene scene = new Scene(layout, 400, 400); // 舞台配置与显示 primaryStage.setTitle("Hello!"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args){ launch(); } }
修复方案
核心问题
getClass().getResourceAsStream()的路径基于类路径而非项目物理文件路径。src/main/resources在编译后会被打包到类路径根目录,直接写物理路径src/main/resources/CheskePic.png完全错误。
正确写法
替换图片加载代码为以下两种方式之一:
方式1:从类路径根目录加载(推荐)
// "/"开头表示从类路径根目录查找资源 Image cheske = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/CheskePic.png")));
- 加入
Objects.requireNonNull()可在资源不存在时抛出明确的空指针异常,便于排查问题。
方式2:相对于当前类的包路径加载
若将图片放到src/main/resources/GUI目录下(与GameGUI类同包的资源目录),可使用:
Image cheske = new Image(Objects.requireNonNull(getClass().getResourceAsStream("CheskePic.png")));
额外检查
- 确认
src/main/resources被IntelliJ标记为Resources Root:右键该目录 → Mark Directory as → Resources Root - 编译后检查
target/classes(Maven)或build/classes(Gradle)目录下是否存在CheskePic.png,确保资源被正确复制
内容的提问来源于stack exchange,提问作者Aegent
相关产品推荐
相关产品推荐

