【发布时间】:2021-07-30 18:24:05
【问题描述】:
我是 Java 新手,也很熟悉。我刚刚使用 JFrame 创建了一个小应用程序并添加了一些按钮和文本字段,我还有一个方法可以设置我想要的任务栏图标和左角的图标。
当我在 Netbeans 中运行程序时,一切似乎都正确,但是当我构建项目时,图标没有显示出来。我尝试了很多东西,但没有一个对我有用。
这是我用于程序的方法:
private void setIcon() {
ImageIcon imageIcon = new ImageIcon("src/main/java/icons/steam.png");
this.setIconImage(imageIcon.getImage());
}
我从构造函数中调用方法。
谢谢。
编辑 1:
实现安德鲁所说的,现在我有了这个:
BufferedImage img = null;
try {
URL url = getClass().getResource("src/main/java/icons/steam.png");
img = ImageIO.read(url);
} catch (IOException e) {
}
this.setIconImage(img);
那是在构造函数上。但是当我运行它时,我得到:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: input == null!
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1400)
我尝试了不同的路径,但我无法获得它。是的,我确定“steam.png”就在那里。
【问题讨论】:
-
new ImageIcon("src/main/java/icons/steam.png");Huh.. 又到了一天中的那个时候。应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 embedded-resource 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。 顺便说一句: 加载图片的实用技巧。采用。图像IO!创建图像图标可能会静默失败,但ImageIO.read(..)在出现问题时会生成有用的堆栈跟踪。 -
检查图像实际上是在您假定的位置的 Jar 中。你在使用 Windows 吗?一个方便的提示。 Jar 文件只是一个专门的 Zip 文件。将 Jar 重命名(副本)以以
.zip结尾,然后双击打开并浏览。另一件事:我总是使用/前缀,提醒类加载器从 Jar 的根目录中查找类。 -
我用WinRAR打开了.jar,我看不到任何名为“icons”的文件夹,不知道为什么。我在“src/main/java/icons”下有“icons”文件夹,还尝试了“src/icons”。我也编辑了源路径,添加 / 作为前缀,所以我有:“/icons/steam.png”
-
OK .. 某些 IDE 要求资源位于特定路径中,然后才能将它们放入最终 Jar。对于某些人来说,它是
resources目录/包。
标签: java image swing jframe embedded-resource