我正在制作国际象棋游戏,我已经把它运行得很好,但我希望能够将它作为JAR文件导出以方便使用。但是当我导出它时,我放在JButtons上的象棋图标就不存在了。我的图像存储在一个单独的文件夹中,调用与src和JRE系统库相同级别的图像。香港专业教育学院尝试使用getClass().getResource(string)
方法,但它给了我一个空指针异常。香港专业教育学院在文章中尝试了类似问题的答案,例如this。但无济于事
答案 0 :(得分:1)
您很可能传递了错误的资源名称,并且由于类加载器找不到它,getResource()
将返回null
。
Class.getResource(String name)
期望资源名称 relative 到加载类的位置。因此,如果您的资源被称为image.jpg
,则image.jpg
必须位于您正在调用其getResource()
方法的类所在的文件夹中。
如果用/
字符启动它,你也可以在jar中指定一个绝对文件夹:
getClass().getResource("/resources/images/image.jpg");
在这种情况下,image.jpg
必须位于jar内部的/resources/images
文件夹中或源文件夹中(由IDE将其复制到bin
文件夹中)。
与具有".."
字面值的类的文件夹相比,您还可以向上导航一个(或多个)文件夹,例如:
getClass().getResource("../images/image.jpg");
在这种情况下,image.jpg
文件必须位于父文件夹的images
子文件夹中,而不是类的文件夹。
注意: Class
对象,您调用的getResource()
方法可以像YourClassName.class
一样获取,或者您想要引用当前实例的类:getClass()
。