Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ClassName.class.getResource()返回null_Java_Embedded Resource - Fatal编程技术网

Java ClassName.class.getResource()返回null

Java ClassName.class.getResource()返回null,java,embedded-resource,Java,Embedded Resource,我花了大约两天的时间试图解决这个问题。我必须创建可运行的JAR。我正在macOS Sierra上使用Eclipse(最新版本),JavaSE10 因此,这是测试项目中唯一的类 package test_package; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; public class Tester { public static vo

我花了大约两天的时间试图解决这个问题。我必须创建可运行的JAR。我正在macOS Sierra上使用Eclipse(最新版本),JavaSE10

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

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();
        }
    }
}
这是测试项目文件结构(不含test.jpg文件):

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

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_包目录中,编译器总是抛出相同的错误:

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"));
.of(Thread.currentThread().getContextClassLoader().getResourceAsStream( “/test.jpg”);

尝试此操作以获取流,然后将其转换为图像

jpeg应该位于资源目录中test.jpg所在的位置。我尝试将其定位在项目的每个文件夹中。JAR文件中的资源具体在哪里?一个问题是,此代码试图在主方法中获取资源,因此可能会获取引导类加载器,而不是上下文类加载器(用于应用程序资源)。为该类创建一个构造函数,然后从该类的一个方法重试,格式为
this.getClassLoader()..
。使用前导斜杠可以使路径独立于类的包。我在src、root(无结果)和bin(成功)中使用test.jpg对其进行了测试。但在创建JAR时,在本例中我得到了NullPointerException。
Optional<InputStream> resourceAsStream = Optional
           .of(Thread.currentThread().getContextClassLoader().getResourceAsStream(
                    "/test.jpg"));