Java获取资源时流总是返回null

标签 java image

我正在尝试使用输入流加载图像。但是,当我加载图像时,它总是返回 null。这是我的项目结构:

project
--+ src
----+ chess
------+ model
--------+ piece
----------+ Piece.java
------+ assets
--------+ icons
----------+ piece
------------+ rook_black.png

我用来访问图像的路径是:./src/chess/assets/icons/piece/rook_black.png

我尝试从 Piece.java 显示目录中的所有文件,它有效:

String path = "./src/chess/assets/icons/piece/";
File[] files = new File(path).listFiles();

for (File file: files) {
    System.out.println(file.getName());
}

我的实际代码是:

public Image getImage() {
    String path = "./src/chess/assets/icons/piece/rook_black.png";
    InputStream image = getClass().getResourceAsStream(path);

    if (image != null) {
        return new Image(image);
    }

    System.out.println("No " + toString() + " image in " + path);
    return null;
}

这段代码实际上输出No rook image in ./src/chess/assets/icons/piece/rook_black.png但我希望InputStream不为空。

最佳答案

问题是您必须考虑编译资源,这意味着您必须考虑 JAR 工件的外观。没有 src 文件夹。

enter image description here

确实,你需要的是

final String path = "/chess/assets/icons/piece/rook_black.png";

这是一个绝对路径,从开始。

关于Java获取资源时流总是返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55383710/

相关文章:

java - SauceLabs Java 原型(prototype)中的奇怪版本号

java - 是否可以将 Unsafe.CompareAndSwap 与内存位置而不是对象的偏移量一起使用?

java - 如何查询 servlet 容器以从 ServletContextListener 获取有效 URL?

html - 如何处理大幅降低网站加载速度的大图片

linux - 生成一个值来反射(reflect)图像的平均亮度

java - 测试在 TestFX 上通过,但在 headless 模式下未通过

java - Selenium GRID 测试执行

javascript - 使用 jQuery,在上传前限制文件大小

javascript - 使用 Three.js 包含图像

swift - 通过 Swift 在 Xcode 中保存和使用用户输入图像