我遇到运行可运行jar文件的问题,该文件中包含图像图标。
代码很好地运行在eclipse上,并在JFrame
中显示图标。我添加它的方法是将它添加到JLabel
然后将JLabel
添加到JFrame
。我将项目导出到一个可运行的Jar文件中,当我双击jar时。它没有运行。
我测试了只是在没有图标代码的情况下将正常的JLabel
添加到JFrame
上,当我导出并运行它时它就可以工作了。
每当我将以下代码添加到代码中时,它就会混淆可运行的Jar文件。
JLabel s1 = new JLabel(new ImageIcon(getClass().getResource("/Images/Pattern1.png")));
我注意到它获取资源时可能会出错。 My Image Pattern1存储在名为Images的文件夹中,该文件夹位于我的项目src文件夹中。所以当我导出它时,我确信它在runnable jar文件中。
在这里我的代码
package main;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MyFrame extends JFrame {
public MyFrame() {
JLabel s1 = new JLabel(new ImageIcon(getClass().getResource("/Images/Pattern1.png")));
this.add(s1);
//JLabel test = new JLabel("Test");
//this.add(test);
}
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.pack();
f.setVisible(true);
}
}
这就是我的项目中的文件。
谢谢
特别是在Windows上,Java可以在文件名中使用大小写。在Eclipse中运行时,Pattern1.PNG
可能是直接从文件系统中获取的。
然而,一旦嵌入Jar中,大小写匹配就变得精确了。这是因为资源只是添加到zip文件中,而Java使用Zip Entry信息来查找内容。
确保命名是完全的以避免问题。试试/Images/Pattern1.PNG
而不是/Images/Pattern1.png