在NetBeans中向JButton添加ImageIcon时出现空指针异常

10

使用NetBeans将ImageIcon添加到按钮属性。

    print.setFont(new java.awt.Font("Serif", 0, 14)); 
    print.setIcon(new javax.swing.ImageIcon(getClass().getResource("/project/print.gif"))); 
    print.setMnemonic('P');
    print.setText("Print");
    print.setToolTipText("Print");

当编译时,它会显示出来

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
    at project.Editor.initComponents(Editor.java:296)

我做错了什么?


问题出在 getClass().getResource("/project/print.gif")) 上。我敢打赌,你正在尝试指向的位置找不到你要查找的图像。 - Sujay
1
Print.gif 图像位于 /project/print.gif,错误与上述相同。 - VenuMadhava
2
你的资源 getClass().getResource("/project/print.gif") 可能为空,请检查。 - vels4j
检查 getClass().getResource("/project/print.gif") 的步骤。 - VenuMadhava
getClass方法是什么?应该是YourClassName.this.getClass()。 - vels4j
5个回答

8
您得到NullPointerException的原因是由于您尝试指定的图像文件无法找到。所以getResource()方法返回null。
作为开始,您可以阅读此链接中关于添加图标的内容:“如何使用图标” 他们建议的一种方法是创建一个方法:
/** Returns an ImageIcon, or null if the path was invalid. */
protected ImageIcon createImageIcon(String path,
                                           String description) {
    java.net.URL imgURL = getClass().getResource(path);
    if (imgURL != null) {
        return new ImageIcon(imgURL, description);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

除了成为一个可多次使用的实用方法以添加图标之外,此方法的优点在于它还会显示错误信息,以防指定路径中找不到该图片。
我强烈怀疑这与您提供的路径有关。最好查看文件夹结构。尝试将路径传递为“project/print.gif”。

当Netbeans Designer生成代码时,您如何更改路径? - David Mendez

1
解决方案: 您需要在资源中添加图像文件夹 结构应该是这样的 src/main/resources/Images/youricon.jpg 查看此图片

1
表达式getClass().getResource("/project/print.gif")调用方法getClass(间接继承自Object类)以检索表示“Editor类”(您的类)声明的Class对象的引用。然后使用该引用调用Class方法getResource,该方法返回图像的位置作为URL。ImageIcon构造函数使用URL定位图像,然后将其加载到内存中。JVM使用类加载器将类声明加载到内存中。类加载器知道它加载的每个类在磁盘上的位置。方法getResource使用Class对象的类加载器来确定资源(例如图像文件)的位置。因此,您会得到一个NullPointerException,而且图像文件必须存储在与“Editor.class”文件相同的位置。您尝试在这里使用的技术使应用程序能够从相对于类文件位置的位置加载图像文件。
因此,您应该将“print.gif”文件移动到“/projectName/bin/packageName”文件夹中并尝试 print.setIcon(new javax.swing.ImageIcon(getClass().getResource("print.gif"))); 而不是 print.setIcon(new javax.swing.ImageIcon(getClass().getResource("/project/print.gif")));

0
这是由于图像文件没有位于指定目录中的原因。你可能不小心拼错了名称,或者名称已更改。

0

经过长时间的努力,我终于解决了这个问题(我还是个新手)

  1. 创建图像包
  2. 在需要使用图像的JFrame、Control等中导入该包

如屏幕截图所示 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接