使用 java 的 jar 文件中的缓冲图像

Buffered Image in jar file using java

好的,我尝试了来自不同资源的许多答案,但我的代码仍然无法正常工作。 (我真的不明白它是如何工作的)

它是这样的,包含我的 java 个文件的文件夹在 Desktop/code 下 我有一个名为 package.name 的包,其中包含我要加载的所有图像的文件夹...

我需要把它做成一个 jar 文件,但我的程序总是说文件无法读取,任何有用的提示将不胜感激

所以,"image" 是包含我需要的所有图片的文件夹

这是我绘制图像的代码:

   g2.drawImage(getPicture("/package.name/image/"+1+".png"), x, y, 200, 200, null);

我有一个缓冲图像的方法:

public BufferedImage getPicture(String filename) {
        try {
            File fp = new File(filename);
            BufferedImage pic = ImageIO.read(getClass().getResourceAsStream(filename));         
            return pic;
        } 
        catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Unable to read file!", "File Error", JOptionPane.ERROR_MESSAGE);
            return null;
        }   
    }

每当我尝试在终端中 运行 它时,我的代码只输出消息对话框,我尝试将它编译成 jar 文件,但它也不起作用。

NullPointerException 对吗?? (我的 crystal 球说你知道)

您应该加载没有点 . 并且只有斜线 / 的图像:

g2.drawImage(getPicture("/your/package/name/image/"+1+".png"), x, y, 200, 200, null);

编辑:您得到的 IllegalArgumentException 不是 NPE - 这个答案仍然有效,因为原因相同 - nullgetResourcesAsStream() 返回。

如果您的 image 目录在上下文的根目录中,那么它在 default 包中,您应该省略 /your/package/name 并仅使用 image/1.png例如