尝试为 JLabel 设置图像图标,但 URL returns 为空

Trying to set image icon for JLabel but URL returns null

正在尝试为 JLabel 设置图像图标,但是 returns 一个 null URL?

我正在使用 Netbeans 并在我的项目中包含 background.png 但它仍然 returns null?

import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

public class NewClass extends JFrame {

    JLabel o = new JLabel();

    public NewClass() {
        createImage("background.png");
        add(o);
        setVisible(true);
        setSize(100, 100);
        setResizable(false);
    }

    public static void main(String[] args) {
        new NewClass();
    }

    public void createImage(String str) {
        URL url = getClass().getResource(str);
        try {
            BufferedImage image = ImageIO.read(url);
            o.setIcon(new ImageIcon(image));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

堆栈跟踪中的错误详细信息:

java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(ImageIO.java:1388)
    at Test.NewClass.createImage(NewClass.java:32)
    at Test.NewClass.<init>(NewClass.java:18)
    at Test.NewClass.main(NewClass.java:26)

当我尝试

时,请你帮忙确定为什么它不起作用
JLabel o = new JLabel(new ImageIcon("background.png"); 

它有效,但如果 background.png 不存在,这很容易出错? 谢谢

编辑:components-SplitPaneDemo2Project - 这是 netbeans 项目的名称,背景 png 直接位于此文件夹中

位于此处: C:\Users\John\Documents\NetBeansProjects\components-SplitPaneDemo2Project

截图:

我已经测试了您的代码并进行了一些更改,它工作正常:

public class NewClass extends javax.swing.JFrame {

    JLabel o = new JLabel();

    public NewClass() {
        initComponents();

        createImage("background.png");
        add(o);
        setVisible(true);
        setSize(100, 100);
        setResizable(false);

        o.setLocation(20, 20);
        o.setSize(100, 25);
    }

    public void createImage(String str) {
        URL url = getClass().getResource(str);
        try {
            BufferedImage image = ImageIO.read(url);
            o.setIcon(new ImageIcon(image));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
....
}

在构造函数中,我设置了 'o' 的位置和大小。

'background.png' 必须在 'NewClass' 的父包中。