获取BufferedImage作为资源,以便它可以在JAR文件中工作

时间:2013-06-09 07:35:19

标签: java image jar bufferedimage

我正在尝试将图像作为BufferedImage加载到我的java应用程序中,目的是让它在JAR文件中工作。我尝试使用在IDE中工作的ImageIO.read(new File("images/grass.png"));,但没有在JAR中使用。

我也试过

(BufferedImage) new ImageIcon(getClass().getResource(
            "/images/grass.png")).getImage();

由于NullPointerException,它甚至不能在IDE中工作。我尝试使用../images,/ images和路径中的图像。这些都不起作用。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:17)

new File("images/grass.png")在当前目录中查找文件系统上的目录映像,该目录是启动应用程序的目录。这是错误的。

ImageIO.read()返回BufferedImage,并以URL或InputStream为参数。要从类路径中获取InputStream的网址,请使用Class.getResource()Class.getResourceAsStream()。路径以/开头,从类路径的根开始。

因此,如果grass.png文件位于类路径中的包images下,则以下代码应该有效:

BufferedImage image = ImageIO.read(MyClass.class.getResourceAsStream("/images/grass.png"));

这将在IDE中工作,该文件位于运行时类路径中。如果IDE"编译"它到目标类目录。为此,该文件必须与源目录一起位于源目录下。