【问题标题】:Cannot display icon - Uncaught error when fetching image无法显示图标 - 获取图像时未捕获的错误
【发布时间】:2014-10-13 11:17:07
【问题描述】:

我想显示另一个图标,而不是通常的 java 加载图标。我已将其放入此文件夹:

我想通过getResource() 方法加载它。

setIconImage(Toolkit.getDefaultToolkit().getImage(MainWindow.class.getResource("house.png")));

但是,我得到:

Uncaught error fetching image:
java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(Unknown Source)
    at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
    at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at sun.awt.image.ImageFetcher.run(Unknown Source)

为什么getResource() 没有从我的文件夹中加载我的图片?感谢您的回答!

【问题讨论】:

  • 包含该代码行的代码是什么包? Jar 的“根”是什么?
  • 您是否厌倦了resources/house.png/resources/house.png
  • @AndrewThompson MainWindow类的包名是:com.CRUDApp.gui
  • @MadProgrammer 使用这两个字符串,结果与上述相同的NullPointerException 。是否可以显示来自getResources() 的网址?
  • 你试过/house.png吗?

标签: java swing nullpointerexception icons embedded-resource


【解决方案1】:

使用以下内容:

setIconImage( Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("house.png")));

setIconImage( Toolkit.getDefaultToolkit().getImage(MainWindow.class.getClassLoader().getResource("house.png")));

【讨论】:

    【解决方案2】:

    只是为了解释为什么@MadProgrammer 的评论 ("/house.png") 有效:

    您正在使用 Maven。 src/main/resources 中的文件成为类路径上的资源。最终放置在类路径的根目录下,no main/resources。所以你的直觉是正确的,最初只是使用"house.png" 作为路径,因为图像位于根目录。

    但您没有考虑到呼叫来自哪里。当你使用Class.getResource时,调用将从类的位置开始搜索,即调用类所在的包。因此,例如,如果您有类似的东西

    src
       main
           resources
                   house.png
       main
           java
               com
                  mypackage
                          CallingClass.class
    

    搜索将在com/mypackage 中进行。因此,要使这条路径 ("house.png") 起作用,图像必须在 com/mypackage 包中,但事实并非如此。它在根中。

    这将我们带到正斜杠/。该正斜杠最终所做的就是使搜索从类路径的根目录开始。所以使用正斜杠("/house.png"),搜索src/main/resources中找到图像,最终在类路径的根目录中。

    【讨论】:

      【解决方案3】:

      Для того чтобы и сборка была корректная, можно использовать вот это:

      ImageIcon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(this.getClass().getResource("logo.png")));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        • 2011-12-01
        • 2012-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多