NetBeans中jbutton添加ImageIcon时出现空指针异常

问题描述 投票:0回答:5

使用 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)

我做错了什么?

java swing jbutton imageicon
5个回答
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”传递


1
投票

表达式

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


1
投票

解决方案: 您需要在资源中添加图像文件夹 结构是这样的 src/main/resources/Images/youricon.jpg Check this image


0
投票

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


0
投票

经过一番努力,这对我有用(还是新手)

  1. 创建图像包
  2. 在需要图像的 JFrame(s)、Control(s) 等中导入包

如截图所示enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.