当我创建ImageIcon类对象时,我使用以下代码:
iconX = new ImageIcon (getClass().getResource("imageX.png"))
当.png位于该类的同一文件夹中时,上述代码可在applet或桌面应用程序中正常运行。
问题是:当.Png在另一个文件夹中时,如何避免NullPointerException
?或者当对象位于与类不同的位置时,如何在对象ImageIcon
中加载图像?
我不明白这种方法是如何运作的,如果有人能帮助我,我会很感激。谢谢!
答案 0 :(得分:4)
看看这个 - Class#getResource(java.lang.String)
请点击上面的链接阅读文档,然后按照以了解正在发生的事情。
它说 -
如果名称以'/'开头,则资源的绝对名称是'/'后面的名称部分。
和
否则,绝对名称的格式如下:
modified_package_name/name
其中modified_package_name是此对象的包名称,其中'/'替换为'。'。
因此,如果此对象(您调用getResource
的地方)在包/pkg1
中(/
,则表示pkg1位于类路径的根目录下)并且您使用了“imageX.png”,那么结果将是pkg1/imageX.png
,这是正确的,因为这是图像所在的位置。
但是,如果我们将资源(imageX.png)移动到其他某个包/pkg2
并且您以同样的方式调用该方法,那么结果仍然是pkg1/imageX.png
,但这次它将是不正确的,因为资源实际位于/pkg2
。那是你最后的NPE。
最好从类路径的根开始明确指定资源的完整路径。 (例如“/pkg/imageX.png”)。
希望这有帮助。
答案 1 :(得分:2)
只需提供资源的路径。
因此,如果您将图像放在Jar中的“/ resources / images”中,则只需使用
即可iconX = new ImageIcon(getClass().getResource("/resources/images/imageX.png"))
基本上你所说的是类加载器,请在类路径中搜索以下资源。
答案 2 :(得分:1)