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

Java 为什么我的图标处理代码抛出NullPointerException?,java,user-interface,swing,awt,nullpointerexception,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.IdAndP

我已经为我的按钮添加了一个图像,但当我运行该框架时,将引发此异常。为什么?请帮助我

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)
第91行:

 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

声明如果

找不到资源,或者调用程序没有足够的权限获取资源

  • 检查
    getResource
    是否真的返回
    null

    System.out.println(getClass().getResource(“/Images/yahoo_1.gif”)

  • 确保您的路径是正确的,并且它位于类路径中

  • 编辑

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

    Source Packages
      Images
        yahoo_1.gif
    
    你的代码运行得很好。这是你的结构吗


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

    它看起来像
    getClass().getResource(“/Images/yahoo_1.gif”)
    返回
    null
    ,即在类路径上找不到.gif。(可能是图像还是图像?

    从此行传入的URL为空:

    getClass().getResource("/Images/yahoo_1.gif")
    
    从JDK文档中:

    [getResource(..)返回]用于读取资源的URL对象, 或者,如果无法创建资源,则为null 已找到或调用程序没有 有足够的特权获得 资源


    可能您的意思是(“Images/yahoo_1.gif”)-即相对路径不是绝对路径?

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

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

    这解决了问题。如果我在这方面有所帮助,请告诉我


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

  • 查看jar文件或bin文件夹(包含.class文件的文件夹)中的图像路径
  • 列表项

  • “jButton1”是否设置为某个值?是的,我为这个按钮设置了一个名为yahoo_1.gif的图像。我使用了这个糟糕的检查(Peter Lang推荐),它是:System.out.println(getClass().getResource(“/Images/yahoo_1.gif”);它返回null,为什么?请帮帮我。我使用netbeans,选择图标菜单添加照片。我做的第一步是:检查getResource是否真的返回null:System.out.println(getClass().getResource(“/Images/yahoo_1.gif”);它返回null,我该怎么办?请帮忙me@JoachimSauer:感谢您的编辑,我使用了Oracle的
    NULL
    而不是Java的
    NULL
    :)非常感谢我使用了Clean and Build,代码运行良好,谢谢。
    getClass().getResource("/Images/yahoo_1.gif")
    
    private class HandlerClass implements ActionListener{
            public void actionperformed(ActionEvent event){
                JOptionPane.showMessageDialog(null, String.format("%s", event.getActionCommand()));
            }
    
    }