【问题标题】:NPE when getting resource获取资源时的 NPE
【发布时间】:2017-02-24 15:41:34
【问题描述】:

我正在尝试从我的 java 应用程序的资源文件夹中获取图像。 但是,无论我尝试以何种方式获取资源,它都会给我一个 NPE。

这是我的代码:

JLabel lbl_pic;
ImageIcon i = new ImageIcon(getClass().getClassLoader().getResource("res/img/user.png")); //NPE occurres here
lbl_pic = new JLabel(i);

我的 NetBeans 项目文件夹如下所示:

ProjectName
    >Source Packages
        >com.scfa.projectName
            >main.java
        >com.scfa.projectName.res.img
            >user.png

谁能告诉我,我做错了什么?

我已经查看了以下主题,但无法使用:

非常感谢您对我的帮助:)

【问题讨论】:

  • getResource("/res/img/user.png")
  • @rkosegi:我试过了,但没用……我知道 NPE 是什么;以及通常如何修复它,但这次我无法让它工作。图像在文件夹中,我也尝试将其放在另一个文件夹中并尝试过,但它也不起作用
  • 您的 res 文件夹不应该被命名为资源,并且应该与源包处于同一级别。或者您是否已将构建工具配置为从新路径读取?检查创建的 jar 文件是否存在图像。
  • new ImageIcon(getClass().getClassLoader().getResource("res/img/user.png")) 为我工作......但只有在将 user.png 移动到:src/main/resource/res/img/user.png 之后。我的测试类在目录src/main/java

标签: java image netbeans nullpointerexception resources


【解决方案1】:

您似乎是在说user.png 在包中com.scfa.projectName.res.img

在这种情况下,您可以使用以下方式获取其 URL:

URL url = getClass().getClassLoader().getResource(
    "/com/scfa/projectName/res/img/u‌​ser.png");  // absolute path

URL url = getClass().getResource("res/img/user.png"); // relative path

一般来说,如果要解析相对于类的资源路径,则必须在 Class 对象上调用 getResource ... 而不是在其类加载器上。 ClassLoader 对象的 getResource 方法会将相对资源路径视为绝对资源路径。这同样适用于ClassClassLoader 上的getResourceAsStream 方法。

【讨论】:

  • 在这个答案中有关于类和类加载器上的getResource 之间的区别的进一步解释:stackoverflow.com/a/676273/7421645 虽然它特别适用于getResourceAsStream 方法。
猜你喜欢
  • 2020-03-19
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
相关资源
最近更新 更多