为什么我的图标处理代码会抛出NullPointerException?

我为我的按钮添加了一个图像,但是当我运行该帧时,会抛出这个exception。为什么?请帮助我。

init: deps-jar: compile-single: run-single: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.ImageIcon.(ImageIcon.java:138) at ClientGUI.IdAndPasswordFrame.initComponents(IdAndPasswordFrame.java:91) at ClientGUI.IdAndPasswordFrame.(IdAndPasswordFrame.java:22) at ClientGUI.IdAndPasswordFrame$4.run(IdAndPasswordFrame.java:200) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) BUILD SUCCESSFUL (total time: 1 second) 

第138行:

 public ImageIcon (URL location) { this(location, location.toExternalForm()); } 

line91:

  jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yahoo_1.gif"))); // NOI18N 

我使用这个糟糕的检查(Peter Lang推荐),它是:System.out.println(getClass()。getResource(“/ Images / yahoo_1.gif”)); 它返回null,为什么? 请帮我。

这意味着, getClass().getResource("/Images/yahoo_1.gif")返回null

JavaDoc声明如果发生这种情况

无法找到资源或调用者没有足够的权限来获取资源。

  1. 检查getResource确实返回null
    System.out.println(getClass().getResource("/Images/yahoo_1.gif"));

  2. 确保您的路径正确并且它在您的类路径中。

编辑

我刚刚尝试使用NetBeans。 我创建了以下结构

 Source Packages Images yahoo_1.gif 

你的代码工作正常。 这是你的结构吗?

尝试右键单击您的应用程序,然后选择“ Clean and Build

为了解决这个问题,需要将映像复制到bin目录中 – 而不是复制到src目录中。

否则,你将在getClass()。getResource(“image.png”)上一直得到null。 该路径不为null ,您可以将其设置为上述 – 仅当您在二进制目录中复制所需的图像时,项目的.class文件所在的位置。

这解决了这个问题。 如果我帮助了解,请告诉我。

伊万娜

看起来像getClass().getResource("/Images/yahoo_1.gif")返回null即在类路径中找不到.gif。 (图像与图像可能?)

传入的URL在此行中为空:

 getClass().getResource("/Images/yahoo_1.gif") 

从JDK文档:

[getResource(..)returns]用于读取资源的URL对象,如果找不到资源或者调用者没有足够的权限来获取资源,则返回null

也许你的意思是(“Images / yahoo_1.gif”) – 即相对路径不是绝对的?

我有同样的问题。 对我有用的是:

  1. 查看jar文件或bin文件夹(带有.class文件的文件夹)并查看图像路径。
  2. 项目清单
 private class HandlerClass implements ActionListener{ public void actionperformed(ActionEvent event){ JOptionPane.showMessageDialog(null, String.format("%s", event.getActionCommand())); } }