You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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")));

额外检查

  1. 确认src/main/resources被IntelliJ标记为Resources Root:右键该目录 → Mark Directory as → Resources Root
  2. 编译后检查target/classes(Maven)或build/classes(Gradle)目录下是否存在CheskePic.png,确保资源被正确复制

内容的提问来源于stack exchange,提问作者Aegent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:57:40