gpt4 book ai didi

java - 在 .jar 文件中加载图像时出现 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:24 24 4
gpt4 key购买 nike

我正在eclipse 中开发一个java 项目。为了分发程序,我通过 eclipse 中的导出功能创建了一个可运行的 .jar 文件。

在我的程序中加载存储在名为“tableImages”的文件夹中的几张图像。我通过 ClassLoader 加载图像(您将在下面找到代码片段)。问题如下:从 .jar 文件执行程序时,在加载上述文件夹中的 .png 文件之一时抛出 NullPointerException。现在有趣的是,完全相同的文件夹中的一些 .png 文件被正确加载,这意味着它们不会导致 NullPointerException。

我使用 jar tf 命令检查了 .jar 的内容。显然无法加载的图像被打包到 jar 中。那么是什么导致了这个 NullPointerException,我该如何解决它呢?

这是我用来将图像绘制到 Swing 架上的类。

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.net.*;

public class LoadBackgroundImage extends Component {

private static final long serialVersionUID = 1L;

BufferedImage img;

public void paint(Graphics g){
g.drawImage(img, 0, 0, null);
}

public LoadBackgroundImage(String image){
URL url = ClassLoader.getSystemResource(image);
try{
img = ImageIO.read(url);
this.setSize(img.getWidth(), img.getHeight());
}catch(IOException e){
System.err.println(e.getMessage());
}
}

public Dimension getPreferredSize(){
if(img == null){
return new Dimension(100, 100);
}else{
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}

public BufferedImage getImage(){
return img;
}

}

非常感谢您的帮助!

最佳答案

URL url = ClassLoader.getSystemResource(image);

此 URL 转换为文件系统中的绝对路径,这将是 jar 中文件的无效路径。例如,如果您在 bar.jar 下有一个名为 foo.png 的文件,则 URL 将为/path_to_current_dir/bar.jar/!foo.png,这是无效的。相反,您可以将文件作为流读取:

InputStream is = getClass().getClassLoader().getResourceAsStream(image);
ImageIO.read(is);

关于java - 在 .jar 文件中加载图像时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com