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

时间:2010-01-07 11:33:47

标签: java user-interface swing awt nullpointerexception

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

init:

deps-jar:
compile-single:
run-single:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
        at ClientGUI.IdAndPasswordFrame.initComponents(IdAndPasswordFrame.java:91)
        at ClientGUI.IdAndPasswordFrame.<init>(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,为什么?请帮助我。

6 个答案:

答案 0 :(得分:7)

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

JavaDoc声明如果

,就会发生这种情况
  

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

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

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

  3. 修改

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

    Source Packages
      Images
        yahoo_1.gif
    

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

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

答案 1 :(得分:4)

为了解决此问题,需要将图像复制到 bin 目录中 - 而不是 src 目录中。

否则,您将始终在 getClass()。getResource(“image.png”)上获得null。 路径 not null 并且您可以将其设置为上述内容 - 仅当您在二进制目录中复制所需的图像时,项目的.class文件所在的位置。

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

伊万娜

答案 2 :(得分:1)

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

答案 3 :(得分:1)

传入的URL在此行中为空:

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

来自JDK文档:

  

[getResource(..)returns]用于读取资源的URL对象,   如果资源不能,则返回null   发现或者调用者没有   获得足够的特权   资源

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

答案 4 :(得分:1)

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

  1. 查看jar文件或bin文件夹(带有.class文件的文件夹)并查看图像路径。
  2. 列表项

答案 5 :(得分:0)

private class HandlerClass implements ActionListener{
        public void actionperformed(ActionEvent event){
            JOptionPane.showMessageDialog(null, String.format("%s", event.getActionCommand()));
        }

}