Java 获取一个BuffereImage作为资源,以便它在JAR文件中工作

Java 获取一个BuffereImage作为资源,以便它在JAR文件中工作,java,image,jar,bufferedimage,Java,Image,Jar,Bufferedimage,我试图将一个映像作为缓冲映像加载到java应用程序中,目的是让它在JAR文件中工作。我尝试使用ImageIO.read(新文件(“images/grass.png”)在IDE中工作,但在JAR中不工作 我也试过了 (BufferedImage) new ImageIcon(getClass().getResource( "/images/grass.png")).getImage(); 由于NullPointerException,它在IDE中甚至无法工作。我尝试使用.

我试图将一个映像作为缓冲映像加载到java应用程序中,目的是让它在JAR文件中工作。我尝试使用
ImageIO.read(新文件(“images/grass.png”)在IDE中工作,但在JAR中不工作

我也试过了

(BufferedImage) new ImageIcon(getClass().getResource(
            "/images/grass.png")).getImage();
由于NullPointerException,它在IDE中甚至无法工作。我尝试使用../images、/images和路径中的图像来执行此操作。这些都不管用

我在这里遗漏了什么吗?

新文件(“images/grass.png”)
在当前目录中查找文件系统上的目录images,即启动应用程序的目录。所以这是错误的

ImageIO.read()
返回一个BuffereImage,并将URL或
InputStream
作为参数。要从类路径获取
InputStream
的URL,可以使用
Class.getResource()
Class.getResourceAsStream()
。路径以/开头,从类路径的根开始

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

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

当文件在运行时类路径中时,这将在IDE中工作。如果IDE将其“编译”到其目标类目录中,则会发生这种情况。为此,该文件必须与Java源文件一起位于源目录下。

图像位于何处?如果您使用的是eclipse,它是否存在于resources目录中?如果您使用的是NetBeans,它是否存在于arc文件夹中?使用Eclipse,images是它自己的文件夹,位于src文件夹之外,但位于project文件夹内。My images文件夹(不是包)位于src文件夹之外,但位于Eclipse中的project文件夹内。所以我需要把图像文件夹移到src?是的。你必须这样做。如果不这样做,eclipse将不会将images文件夹复制到目标目录,因此这些图像将不会成为运行时类路径的一部分。它现在工作正常。谢谢你的帮助。@JBNizet:回答得很好。