我开发了一个桌面应用程序。问题是当我将应用程序导出到jar文件时,图标未显示在应用程序中。当我从Eclipse运行它时,所有图标都显示在那里。
我的项目中的一个例子:
package net.ebank.gui;
import java.awt.*;
import javax.swing.*;
public class EBank extends JFrame {
protected Start s;
public EBank() {
setTitle("Welcome To EBank");
setBackground(Color.white);
Image img = new ImageIcon("../EBank/res/bank.jpg").getImage();
this.setIconImage(img);
/*"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"*/
setVisible(false);
setSize(1350,700);
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s= new Start(this);
s.setLocation(getWidth()/2, getHeight()/4);
}
public static void main(String[] args){
new EBank();
}
}
答案 0 :(得分:6)
使用Class#getResource()
而不是将相对路径传递给ImageIcon
构造函数。
还要确保图像文件实际上是生成的JAR的一部分。
答案 1 :(得分:5)
要使其正常工作,请按以下步骤操作:
现在,为了访问,比如任何图像,您将使用。
getClass().getResource("/images/yourImageName.extension");
将返回一个URL对象。在这种情况下,请记住第一个正斜杠,因为在源文件夹中的任何内容都可以通过简单的方式在此帮助下访问。现在,当您运行项目时,此源文件夹的内容将自动添加到bin文件夹中,当您创建 Runnable Jar 时,源文件夹中的内容可以按原样访问。
在这个链接上,我试图用图像解释how to add Images to your Eclipse Project
答案 2 :(得分:4)
您可以修复JAR文件的布局,这可能只是像在Eclipse中那样相应地排列文件夹,或者只是像Matt Ball所说的那样,使用Class#getResource
或Class#getResourceAsStream
。