java 在NetBeans中将ImageIcon添加到jbutton时出现空指针异常

ha5z0ras  于 2022-11-20  发布在  Java
关注(0)|答案(5)|浏览(151)

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

我做错了什么?

toiithl6

toiithl61#

出现NullPointerException的原因是由于某种原因,您试图指定的图像文件找不到,因此getResource()方法返回一个null。
首先,您可以在此链接中阅读有关添加图标的信息:"How to Use Icons"
他们建议的方法之一是创建一个方法:

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

lvjbypge

lvjbypge2#

表达式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")));

wr98u20j

wr98u20j3#

这是因为图像文件不在指定的目录中。您可能键入了错误的名称或名称已更改。

tp5buhyn

tp5buhyn4#

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

3wabscal

3wabscal5#

经过一番挣扎,这对我起作用了(仍然是新手)
1.创建图像包
1.在需要图像的JFrame、控件等中导入包
如屏幕截图enter image description here所示

相关问题