4

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

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());
}

第 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,为什么?请帮我。

4

6 回答 6

8

这意味着,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.

于 2010-01-07T11:42:06.963 回答
4

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

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

这解决了问题。让我知道我是否对此有所帮助。

约阿纳

于 2010-11-11T21:56:43.250 回答
2

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

  1. 查看 jar 文件或 bin 文件夹(带有 .class 文件的文件夹)并查看图像的路径。
  2. 项目清单
于 2016-05-24T20:32:33.520 回答
1

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

于 2010-01-07T11:42:52.593 回答
1

从这一行传入的 URL 为空:

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

从 JDK 文档:

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

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

于 2010-01-07T11:44:06.163 回答
0
private class HandlerClass implements ActionListener{
        public void actionperformed(ActionEvent event){
            JOptionPane.showMessageDialog(null, String.format("%s", event.getActionCommand()));
        }

}
于 2016-11-21T11:53:47.713 回答