我在这里检查了许多以前关于stackoverflow的问题,但是没有一个问题可以解决我遇到的问题。 我必须“简单地”在我的JFrame中插入一个图标,我试图这样做(来自另一个stackoverflow问题):
// ico file is in the same folder
ImageIcon frameIcon = new ImageIcon("/iconqm16.ico");
jFrame1.setIconImage(frameIcon.getImage());
但这没用。在此之后,我尝试了以下操作:
URL iconURL = getClass().getResource("/iconqm(20x20).png");
ImageIcon icon = new ImageIcon(iconURL);
jFrame1.setIconImage(icon.getImage());
这次我使用.png是因为我读到.ico是Windows特定的。我使用了类资源,因为它可以打包在jar中。 但是我的图标还没有出现。有人可以在这些摘要中找到任何错误吗?也许是图像尺寸的问题?我尝试了16x16、20x20、32x32,但均无效果。
编辑
我发现了问题所在。在下面尝试了此代码,即使路径正确,我的程序也找不到文件。在编辑问题之前,我已经对其进行了仔细检查,您能否帮助我理解为什么找不到图片文件?
URL url = getClass().getResource("C:/Users/Sergio/Documents/NetBeansProjects/Queue Manager v1.0/icon/icon16px.png");
if (url == null) {
System.out.println("Could not find image!");
} else {
jFrame1.setIconImage(new ImageIcon(url).getImage());
}
}
编辑
这终于奏效了,但老实说,我不知道getClass().getResource(pathToFile)
为何不奏效的原因。使用了此解决方案:
try {
// Set Frame's Icon
BufferedImage img = ImageIO.read(new File("C:\\Users\\Sergio\\Documents\\NetBeansProjects\\Queue Manager v1.0\\icon\\icon16px.png"));
this.setIconImage(img);
} catch (IOException ex) {
Logger.getLogger(QueueManagerForm.class.getName()).log(Level.SEVERE, null, ex);
}
感谢您的帮助!