导出Runnable Jar不能使用ImageIcon

时间:2015-02-18 03:55:04

标签: java swing jar embedded-resource imageicon

我遇到运行可运行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);
    }
}

这就是我项目中的文件。

enter image description here

由于

1 个答案:

答案 0 :(得分:2)

特别是在Windows上,Java可以在文件名中使用大小写。在Eclipse中运行时,可能直接从文件系统中拾取Pattern1.PNG

然而,一旦嵌入Jar中,案例匹配就变得完全。这是因为资源只是添加到zip文件中,而Java使用Zip Entry信息来查找内容。

确保命名是完全正确的以避免问题。请尝试使用/Images/Pattern1.PNG代替/Images/Pattern1.png