Java 如何使用getClass().getResource()方法

Java 如何使用getClass().getResource()方法,java,Java,创建ImageIcon类对象时,我使用以下代码: iconX = new ImageIcon (getClass().getResource("imageX.png")) 当.png位于类的同一文件夹中时,上述代码可以在小程序或桌面应用程序中正常工作 问题是:当.Png在另一个文件夹中时,如何避免出现NullPointerException?或者,当对象ImageIcon位于类的不同位置时,如何在该对象中加载图像 我不明白这个方法是怎么工作的,如果有人能帮我,我很感激。谢谢 只需提供资源的路

创建ImageIcon类对象时,我使用以下代码:

iconX = new ImageIcon (getClass().getResource("imageX.png"))

当.png位于类的同一文件夹中时,上述代码可以在小程序或桌面应用程序中正常工作

问题是:当.Png在另一个文件夹中时,如何避免出现
NullPointerException
?或者,当对象
ImageIcon
位于类的不同位置时,如何在该对象中加载图像


我不明白这个方法是怎么工作的,如果有人能帮我,我很感激。谢谢

只需提供资源的路径即可

因此,如果将图像放在Jar中的“/resources/images”中,只需使用

iconX = new ImageIcon(getClass().getResource("/resources/images/imageX.png"))
本质上,您要说的是,类加载器,请在您的类路径中搜索以下资源。

如果映像是内部的(您想要一个相对于项目的位置,或者打包到您的jar中),请按照mad程序员说的做:

iconX = new ImageIcon(getClass().getResource("/path/imageX.png"))
路径是相对的,因此path/将是与项目(或打包到jar中)位于同一文件夹中的文件夹

如果需要外部图像,只需将ImageIcon构造函数交给路径(例如“C:/…/file.png”)。但不建议这样做,因为最好将其用作资源

有关ImageIcon构造函数的更多信息,请参阅。有关加载类资源的更多信息,请参阅(Javadoc链接)

查看以下内容-

请点击上面的链接,阅读文档,了解发生了什么

上面说-

如果名称以“/”开头,则资源的绝对名称是名称中“/”后面的部分

否则,绝对名称的形式如下:

     modified_package_name/name
其中,修改后的_package_name是此对象的包名,用“/”代替“.”

因此,如果这个对象(调用
getResource
)位于包
/pkg1
/
意思是pkg1就在类路径的根下)并且您使用了“imageX.png”,那么结果将是
pkg1/imageX.png
,这是正确的,因为这就是图像所在的位置

但是,如果我们将资源(imageX.png)移动到另一个包
/pkg2
,并且您以相同的方式调用了该方法,那么结果仍然是
pkg1/imageX.png
,但这次它将是不正确的,因为资源实际上位于
/pkg2
中。那就是你最终选择NPE的时候了

最好从类路径的根开始显式指定资源的完整路径。(例如“/pkg/imageX.png”)


希望这能有所帮助。

好的,您对资源文件夹的看法是对的,这样更好。我尝试了另一个文件夹中的文件到类路径的完整路径,也得到了一个nullPointerExceptioin。我使用以下代码:imageX=newimageicon(getClass().getResource(“C:/Users/JP/Desktop/applet/iconX.png”);而且不起作用!