我已经搜索了一段时间来修复此问题。我的工作区中有一个项目文件夹(该文件夹基本上是我的根目录),其中有一个名为icon.gif的文件。在我的计划中,我有以下内容:
package com.mgflow58.Main;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Game {
public static void main(String[] args) {
JFrame window = new JFrame("Guppy's Adventure");
window.add(new GamePanel());
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
window.pack();
window.setLocationRelativeTo(null);
window.setVisible(true);
window.setIconImage(new ImageIcon("icon.gif").getImage());
}
}
当我运行它时,图标在eclipse中工作正常,但导出的jar文件不会像在eclipse中那样显示图标。知道为什么吗?我试图解决这个问题,我疯了。
答案 0 :(得分:1)
jar文件包含其正确文件夹中所需的所有图像文件。
有问题...... ImageIcon(String)
正在寻找名字
文件在磁盘上,如JavaDocs ...
public ImageIcon(String filename)
从中创建一个ImageIcon 指定的文件。将使用MediaTracker预加载图像 监视图像的加载状态。指定的String可以是 文件名或文件路径。指定路径时,请使用 Internet标准正斜杠(" /")作为分隔符。 (字符串是 转换为URL,因此正斜杠适用于所有系统。)For 例如,指定:
new ImageIcon("images/myImage.gif")
描述初始化为文件名字符串。
参数:
filename - 指定a的字符串 文件名或路径
资源不再驻留在磁盘上,但未嵌入到Jar文件中,因此无法再使用基于File
的方法访问它们。
相反,您需要使用类似Class#getResource
的内容,例如......
window.setIconImage(new ImageIcon(Game.class.getResource("icon.gif")).getImage());
话虽如此,我还建议使用ImageIO
而不是ImageIcon
,原因有多种,但主要是因为如果无法加载资源,它实际上会抛出异常某种原因,而不是默默地失败......
请查看Reading/Loading an Image了解详情