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