我用来加载图片的代码是:
ImageIO.read(SpriteSheet.class.getResource(path));
路径是资源的路径。但是IllegalArgumentException
会出错。我想知道可能导致什么,并得出结论,资源应该添加到与类相同的路径中。
是否可以从其他文件夹加载图像,例如bin文件夹之外的res文件夹? (持有编译类的文件夹)
编辑: 所以我搞砸了一些事情,并找到了解决方案。但现在我有另一个问题。这是我的代码
File sheet = new File(SpriteSheet.class.getProtectionDomain().getCodeSource().getLocation().getPath());
URI uri = sheet.toURI();
BufferedImage image = ImageIO.read(uri.toURL());
当我尝试运行它时,它会给我一个IIOException: Can't read Input File
这意味着我永远无法真正实现它。我尝试通过将URL固定到控制台进行调试,这是URL。
C:\Users\Amma\Abhijeet\Eclipse%20Workspace1\Test%20Game\bin
%20
位于中间位置。意味着该文件永远不会被加入。无论如何我可以解决这个问题吗?
感谢。
答案 0 :(得分:0)
Class.getResource
将返回null。
ImageIO.read
的所有变体如果收到空输入,将抛出IllegalArgumentException
。
查看getResource的文档,了解如何根据命名的给定资源构建绝对资源名称以及搜索资源的规则是什么。
只要您有权限,您就可以从任何位置读取图像,ImageIO.read方法接受文件,URL或InputStream,因此您有很多选项可以执行此操作。