【发布时间】:2013-01-08 07:42:17
【问题描述】:
我有一个应用程序可以加载图像以创建一个带有图标的按钮。从 IDE 启动时,它可以正常工作,但从导出的 jar 文件启动时,会出现图像提取错误。
图片位置:
+Project
-Source Packages
-Tools
-start.jpg
使用的代码:
static final String STARTIMAGE = "/Tools/start.JPG";
public static JButton createStartButton() {
Image img = Toolkit.getDefaultToolkit().getImage(GUITools.class.getResource(STARTIMAGE));
JButton b = new JButton("",new ImageIcon(img));
b.setPreferredSize(smallButton);
b.setMaximumSize(smallButton);
b.setMinimumSize(smallButton);
return b;
现在,最奇怪的是,在另一个屏幕中,一个按钮以完全相同的方式创建,而这个按钮工作得很好...... 代码:
static final String PREVIOUSIMAGE = "/Tools/previous.gif";
public JButton createPreviousButton(){
Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(PREVIOUSIMAGE));
JButton b = new JButton("Previous",new ImageIcon(img));
b.setPreferredSize(dimensionButton);
b.setMaximumSize(dimensionButton);
b.setMinimumSize(dimensionButton);
return b;
}
唯一的区别是一个是静态的,但即使让它像另一个一样非静态,它仍然无法工作。
我尝试了我在这个论坛和其他网站上找到的所有内容,包括这个好话题:
How to bundle images in jar file (话题末尾生成的url就是'null')
似乎没有任何效果...请帮助!
谢谢!
【问题讨论】:
-
文件名为start.jpg,但代码使用start.JPG。案件很重要。
-
尝试省略第一个斜线
/以及如何创建 jar? -
getClass().getClassLoader().getResource("Tools/previous.gif")怎么样? -
getClass().getClassLoader().getResource("Tools/previous.gif")和getClass().getResource("/Tools/previous.gif")做同样的事情。后者调用前者。这是记录在案的。