在java中读取图像时发生IllegalArgumentException

在java中读取图像时发生IllegalArgumentException,java,image,swing,jframe,embedded-resource,Java,Image,Swing,Jframe,Embedded Resource,我试图获取一个图像作为JFrame窗口的图标,但在加载图像时出现了此错误 Exception in thread "main" java.lang.IllegalArgumentException: input == null! at javax.imageio.ImageIO.read(Unknown Source) at quest2.WindowFrame.<init>(WindowFrame.java:21) at quest2.WindowFrame

我试图获取一个图像作为JFrame窗口的图标,但在加载图像时出现了此错误

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(Unknown Source)
    at quest2.WindowFrame.<init>(WindowFrame.java:21)
    at quest2.WindowFrame.main(WindowFrame.java:39)

我不确定我做错了什么,所以如果有人能在这方面给我帮助,那就太好了。

src
在运行时不存在

你应该使用

getClass().getResource("/quest2/Logo.png")
反而

已更新

您还应该考虑图像可能为空的情况,例如

try {
    BufImage = ImageIO.read(getClass().getResource("/quest2/Logo.png"));
} catch (IOException e) {
    e.printStackTrace();
}

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setSize(720, 480);
setTitle("Quest 2");
if (BufImage != null) {
    ImageIcon ii = new ImageIcon(BufImage);
    image = ii.getImage();
    setIconImage(image);
}
setLocationRelativeTo(null);
setVisible(true);
另外,更改帧的
可调整大小
状态将影响帧的大小,您应该在设置帧大小(最好使用
pack
)之前执行此操作,并最后调用
setVisible


您可能还想查看并确保在事件分发线程的上下文中初始化UI

同时将图像设置代码移到内部,尝试对BufImage进行null检查可能是个好主意。@JunedAhsan或至少处理
BufImage
可能是
null
这一事实,能够在这方面帮助您:-)
try {
    BufImage = ImageIO.read(getClass().getResource("/quest2/Logo.png"));
} catch (IOException e) {
    e.printStackTrace();
}

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setSize(720, 480);
setTitle("Quest 2");
if (BufImage != null) {
    ImageIcon ii = new ImageIcon(BufImage);
    image = ii.getImage();
    setIconImage(image);
}
setLocationRelativeTo(null);
setVisible(true);