如何使用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_pa​​ckage_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链接)