【发布时间】:2011-11-03 21:59:11
【问题描述】:
我见过许多不同的示例,展示了如何设置 JFrame 的IconImage,以便应用程序使用该图标而不是标准咖啡杯。它们都不适合我。
这是“我的”代码(大量借用自其他帖子和整个互联网):
public class MyApp extends JFrame
{
public MyApp()
{
ImageIcon myAppImage = loadIcon("myimage.jpg");
if(myAppImage != null)
setIconImage(myAppImage.getImage());
}
private ImageIcon loadIcon(String strPath)
{
URL imgURL = getResource(strPath);
if(imgURL != null)
return new ImageIcon(imgURL);
else
return null;
}
}
当调用getResource() 方法时,此代码在loadIcon 中失败。对我来说,这里只有两种可能性:(1)myImage.jpg 位于错误的目录中,或者(2)getResource() 不喜欢我的图像(我必须在 Photoshop 中将其从 CMYK 转换为 RGB,所以我可以用ImageIO 在其他地方使用相同的图像。)
我已经使用System.out.println(new File(".").getAbsolutePath()); 技巧来定位应该存储图像 JPG 的目录,但仍然没有任何效果。我随后将 JPG 放在了项目中的几乎每个目录中,只是为了排除文件位置是罪魁祸首。
所以这让我相信getResource() 不喜欢 JPG 本身。但我现在已经用尽了我对 Swing 强大而广阔的世界中的图像和图标的理解。
我的 JPG 在其他图像查看器中加载良好,因此也排除了这种情况。有人有什么想法吗?
提前致谢!
【问题讨论】:
-
要检查问题是否出在 URL 上,请尝试:
System.out.println("estimated number of bytes in the file = " + imgURL.openStream().available());。 -
感谢 toto2 - 现在我们终于到了某个地方!那行抛出一个带有“null”消息的异常......很容易成为我见过的最糟糕和最没有帮助的异常消息。有什么线索吗?
-
available根据 api 来说并不是一个坚如磐石的方法,所以我们不能得出太多的结论。您可以尝试将openStream().avalaible()拆分为两条不同的行,以查看错误来自何处。我的猜测是您的图像很好,但无法定位。既然你用的是NetBeans,也可以看看这个tutorial。 -
@Mar,为什么没有什么对你有用?为什么这篇帖子 (stackoverflow.com/questions/7181699/…) 中的建议对你有用,而对其他人有用?为什么不能像以前要求的那样发布 SSCCE ???我们不是读心术的人,我们无法猜测为什么它适用于其他所有人而不适用于您!!!
-
抱歉,当人们继续发布问题而没有解决问题所需的所有必要信息时,我会感到冒犯。你继续浪费每个花时间阅读这个问题的人的时间。不仅如此,当您不希望我在这里帮助您时,您还敢直接从我的博客向我发送电子邮件寻求帮助!