如何使用getClass()。getResource()方法
当我创建ImageIcon类对象时,我使用以下代码:
iconX = new ImageIcon (getClass().getResource("imageX.png"))
当.png位于类的同一文件夹中时,上述代码可以在applet或桌面应用程序中正常运行。
问题是:当.Png在另一个文件夹中时,如何避免NullPointerException
? 或者当ImageIcon
位于与类不同的位置时,如何在ImageIcon
加载图像?
我不明白这种方法是如何工作的,如果有人能帮助我,我会很感激。 谢谢!!
看看这个 – Class#getResource(java.lang.String)
请单击上面的链接并阅读文档,然后按照以了解发生了什么。
它说 –
如果名称以“/”开头,则资源的绝对名称是“/”后面的名称部分。
和
否则,绝对名称具有以下forms:
modified_package_name/name
其中modified_package_name是此对象的包名称,其中’/’替换为’。’。
所以,如果这个对象 (你调用getResource
)在package /pkg1
( /
意思是pkg1在classpath的根目录下)并且你使用了“imageX.png”那么结果就是pkg1/imageX.png
这是正确的因为那是图像所在的位置。
但是,如果我们将资源(imageX.png)移动到其他某个包/pkg2
并且您以相同的方式调用该方法,那么结果仍然是pkg1/imageX.png
但这次它将是不正确的,因为该资源实际位于/pkg2
。 那是你最后的NPE。
从类路径的根开始明确指定资源的完整路径是很好的。 (例如“/pkg/imageX.png”)。
希望这可以帮助。
只需提供资源的路径即可。
因此,如果您将图像放在Jar中的“/ resources / images”中,您只需使用即可
iconX = new ImageIcon(getClass().getResource("/resources/images/imageX.png"))
基本上你所说的是类加载器,请在类路径中搜索以下资源。
如果图像是内部的(你想要一个相对于你的项目的位置,或者可能打包到你的jar中),那么疯狂的程序员说:
iconX = new ImageIcon(getClass().getResource("/path/imageX.png"))
路径是相对的,因此path /将是与项目相同的文件夹中的文件夹(或打包到jar中)。
如果你想要一个外部图像,只需将ImageIcon构造函数放在路径上(例如“C:/…/ file.png”)。 但不建议这样做,因为最好将它用作资源。
有关ImageIcon构造函数的更多信息,请参见此处 。 有关加载类资源的更多信息,请参阅此处 (Javadoc链接)