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)

我究竟做错了什么?

4

4 回答 4

8

您收到 NullPointerException 的原因是由于某种原因无法找到您尝试指定的图像文件。所以该getResource()方法返回一个空值。

首先,您可以在此链接中阅读有关添加图标的信息:“如何使用图标”

他们建议的方法之一是创建一个方法:

/** 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”传递

于 2012-10-31T06:20:54.240 回答
0

表达方式getClass().getResource("/project/print.gif")调用方法 getClass (间接继承自类 Object )以检索对表示“编辑器类”(您的类)声明的 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")));

于 2017-10-18T15:52:09.873 回答
0

这是由于图像文件不在指定目录中的原因。您可能以某种方式输入了错误的名称或名称已更改。

于 2020-11-27T17:05:54.177 回答
0

解决方案:您需要在资源结构中添加图像文件夹,如下所示 src/main/resources/Images/youricon.jpg检查此图像

于 2021-05-30T10:00:23.747 回答