java输入==加载图像时为空
我一直在尝试加载一个图像,它在eclipse中运行良好。但是,在编译后运行它时,它会在input==null时崩溃。获取图标的方法如下:
public ImageIcon getIcon(String iconName){
InputStream imageStream = this.getClass().getClassLoader().getResourceAsStream("images"+File.separator+iconName);
InputStream t = this.getClass().getClassLoader().getResourceAsStream("images");
Image image = null;
try
{
image = ImageIO.read(imageStream);
return new ImageIcon(image);
}
catch(IOException e){
return null;
}
catch(IllegalArgumentException e){
System.out.println(e.getMessage());
System.out.println("Image folder stream: Im"+t);
System.out.println("Image folder + image stream: "+imageStream);
return null;
}
}
控制台输出为:
input == null!
Image folder stream:sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@14b4656e
Image folder + image stream: null
input == null!
Image folder stream:sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@3a81e634
Image folder + image stream: null
我读过与我相同错误的其他线程,但我无法解决它。任何帮助都将不胜感激,谢谢
# 1 楼答案
几乎可以肯定,这是类路径的问题
imageStream变量为null,因此您的类加载器无法找到并加载该文件。从那时起,这种方法注定要失败
在IDE中运行时,Eclipse将帮助您设置路径,这意味着它可以正常运行。当您在命令行上运行它时,您需要确保您的类路径与Eclipse的相匹配
我假设您有一个“images”文件夹,其中包含各种图像,但它是否可以在编译的JAR中使用,或者作为run命令的类路径中的元素使用
# 2 楼答案
getResource[AsStream]()
需要一个/
分隔的路径。总是不管你的平台是什么。不要使用File.separator
。使用/