【问题标题】:How to use getClass().getResource() method如何使用 getClass().getResource() 方法
【发布时间】:2017-06-08 15:31:16
【问题描述】:

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

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

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

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

我不明白这种方法是如何工作的,如果有人可以帮助我,我将不胜感激。谢谢!!

【问题讨论】:

    标签: java


    【解决方案1】:

    看看这个 - Class#getResource(java.lang.String)

    请单击上面的链接并阅读文档并按照以了解发生了什么。

    上面写着-

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

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

         modified_package_name/name
    

    modified_pa​​ckage_name 是 此对象 的包名,用 '/' 代替 '.'。

    因此,如果 此对象(您在其中调用 getResource)在包 /pkg1/ 意味着 pkg1 就在类路径的根目录下)并且您使用了“imageX. png" 那么结果将是pkg1/imageX.png 这是正确的,因为这是图像所在的位置。

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      只需提供资源的路径。

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

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

      基本上你的意思是,类加载器,请在你的类路径中搜索以下资源。

      【讨论】:

        【解决方案3】:

        如果图像是内部的(你想要一个相对于你的项目的位置,或者可能打包到你的 jar 中),按照疯狂的程序员所说的去做:

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

        路径是相对的,因此 path/ 将是与您的项目在同一文件夹中的文件夹(或打包到您的 jar 中)。

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

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

        【讨论】:

        • 好的,资源文件夹是对的,这样更好。我在与类路径不同的文件夹中尝试了文件的完整路径,并得到了一个 nullPointerExceptioin。我使用以下代码: imageX = new ImageIcon(getClass().getResource("C:/Users/JP/Desktop/applet/iconX.png"));并且不起作用!
        猜你喜欢
        • 2016-05-27
        • 1970-01-01
        • 2013-01-13
        • 2020-06-13
        • 2011-07-21
        • 1970-01-01
        • 2014-04-05
        相关资源
        最近更新 更多