导出Runnable Jar不能使用ImageIcon

问题描述 投票:0回答:1

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

这就是我的项目中的文件。

谢谢

java swing jar embedded-resource imageicon
1个回答
2
投票

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

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

确保命名是完全的以避免问题。试试/Images/Pattern1.PNG而不是/Images/Pattern1.png

© www.soinside.com 2019 - 2024. All rights reserved.