ClassName.class.getResource() returns null



我正在尝试解决这个问题大约 2 天。我必须创建可运行的 JAR。我正在使用 Eclipse(最新版本(,macOS Sierra 上的 Java SE 10。

因此,这是测试项目中唯一的类。

package test_package;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Tester {
public static void main(String[] args) {
try {
BufferedImage testImage = ImageIO.read(Tester.class.getClassLoader().getResourceAsStream("/test.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
}

这是测试项目文件结构(不带测试.jpg文件(:

TestProject
- bin
-- test_package
--- Tester.class
- src
-- test_package
--- Tester.java

我尝试了四种不同的选择:

BufferedImage testImage = ImageIO.read(Tester.class.getResourceAsStream("test.jpg"));
BufferedImage testImage = ImageIO.read(Tester.class.getResourceAsStream("/test.jpg"));
BufferedImage testImage = ImageIO.read(Tester.class.getClassLoader().getResourceAsStream("/test.jpg"));
BufferedImage testImage = ImageIO.read(Tester.class.getClassLoader().getResourceAsStream("test.jpg"));

如果 test.jpg 放在项目的根目录中,在 src 或 test_package 目录中,编译器总是抛出相同的错误:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!

如果我将 test.jpg 复制到 bin 目录,这两个选项会给出正确的结果:

BufferedImage testImage = ImageIO.read(Tester.class.getResourceAsStream("/test.jpg"));
BufferedImage testImage = ImageIO.read(Tester.class.getClassLoader().getResourceAsStream("test.jpg"));

但是当我尝试创建可运行 JAR 时,出现了同样的错误。尝试创建 JAR 时,我将 test.jpg 复制到项目的每个目录中。 在创建 Runnable JAR 时,我还尝试更改 Eclipse 库处理中的选项(我尝试了项目的所有三个选项以及所有四个命令选项(。在每种情况下,都会出现错误。

关于源目录。就我而言,源目录是 src。

所以,我不知道下一步该怎么做。我几乎尝试了所有方法,但没有结果。有什么想法吗?

Optional<InputStream> resourceAsStream = Optional
.of(Thread.currentThread().getContextClassLoader().getResourceAsStream(
"/test.jpg"));

尝试这样做以获取流,然后将其转换为图像

最新更新