2

我用来加载图像的代码是:

 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在中间。这意味着该文件是并且永远不能被访问。无论如何我可以解决这个问题吗?

谢谢。

4

1 回答 1

0

Class.getResource如果找不到资源或调用者没有足够的权限来获取资源,将返回 null。如果它们收到空输入 ,所有的变体ImageIO.read都会抛出一个。IllegalArgumentException

查看getResource的文档以了解如何从给定的资源中构造绝对资源名称以及搜索资源的规则是什么。

只要您有权限,您就可以从任何位置读取图像,ImageIO.read 方法接受文件、URL 或 InputStream,因此您有很多选择。

于 2013-03-22T13:57:28.480 回答