Java 加载资源

Java 加载资源,java,resources,Java,Resources,我正在编写一个Java应用程序,它需要从资源文件夹加载一些图像。我已将该文件夹添加到Java库中。 我让它用这个代码读取缓冲区图像 public BufferedImage grabImage(String fileName, int subImgNumber){ ClassLoader classloader = Thread.currentThread().getContextClassLoader(); BufferedImage tmp; if(!fileName

我正在编写一个Java应用程序,它需要从资源文件夹加载一些图像。我已将该文件夹添加到Java库中。 我让它用这个代码读取缓冲区图像

public BufferedImage grabImage(String fileName, int subImgNumber){
    ClassLoader classloader = Thread.currentThread().getContextClassLoader();
    BufferedImage tmp;
    if(!fileName.equals("null"))
    try {
        tmp = ImageIO.read(classloader.getResourceAsStream("../res/textures/"+fileName+".png"));
        maxIndex = tmp.getWidth()/32 - 1;
        if(subImgNumber > maxIndex){
            subImgNumber = maxIndex;
        }else if(subImgNumber < 0){
            subImgNumber = 0;
        }
        requestImage = tmp.getSubimage(subImgNumber * 32, 0, 32, 32);
    } catch (IOException e) {
        e.printStackTrace();
    }
    else
        requestImage = null;
    return requestImage;
}
公共缓冲区图像抓取图像(字符串文件名,int subImgNumber){
ClassLoader ClassLoader=Thread.currentThread().getContextClassLoader();
缓冲图像tmp;
如果(!fileName.equals(“null”))
试一试{
tmp=ImageIO.read(classloader.getResourceAsStream(“../res/textures/”+fileName+“.png”);
maxIndex=tmp.getWidth()/32-1;
if(subImgNumber>maxIndex){
subImgNumber=最大索引;
}else if(subImgNumber<0){
subImgNumber=0;
}
requestImage=tmp.getSubimage(subImgNumber*32,0,32,32);
}捕获(IOE异常){
e、 printStackTrace();
}
其他的
requestImage=null;
返回请求图像;
}
如果我在Eclipse中测试应用程序,它工作得很好,速度也很快,但是当我导出jar文件时,它就不工作了,并抛出了这个验证

我已经检查了.jar文件的内部,它包含了我需要的所有图像。我的代码有问题吗?

已修复,
我用
getResource()
更改了方法
getResource()
它修复了所有问题后堆栈跟踪的其余部分。读取图像时可能出现问题,因此
tmp
保持
null
。这是完整堆栈跟踪的图像,我认为它不会帮助堆栈跟踪告诉您错误发生的位置(文件:line)。属于源代码的最顶层文件(在本例中为LevelLoader.java)就是问题所在。上面的几行表示读取流时出现问题。检查文档中的
ClassLoader.getResourceAsStream()
,以确保正确使用该方法。您还应该确保您尝试加载的文件存在。该文件存在是因为我打开了jar文件以检查资源是否在其中,实际上还有图像,我在发布之前检查了文档,并且我阅读了这些文档,看起来我没有犯错误,实际上在Eclipse中尝试调试时它是有效的