【问题标题】:Exporting Runnable Jar Not Working with ImageIcon导出可运行 Jar 不适用于 ImageIcon
【发布时间】:2015-04-18 23:40:37
【问题描述】:

我在运行包含图像图标的可运行 jar 文件时遇到问题。

代码在 Eclipse 上运行良好,并在 JFrame 中显示图标。我添加它的方法是将它添加到JLabel,然后将JLabel 添加到JFrame。我将项目导出到一个可运行的 Jar 文件中,然后双击该 jar。它没有运行。

我测试了只是在没有图标代码的JFrame 上添加了一个普通的JLabel,当我导出并运行它时它可以工作。

每当我在代码中添加以下行时,它都会弄乱可运行的 Jar 文件。

JLabel s1 = new JLabel(new ImageIcon(getClass().getResource("/Images/Pattern1.png"))); 

我注意到它在获取资源时可能有问题。我的 Image Pattern1 存储在一个名为 Images 的文件夹中,该文件夹位于我的项目 src 文件夹中。 所以当我导出它时,我确定它在可运行的 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);
    }
}

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

谢谢

【问题讨论】:

  • 不确定会不会有什么不同,但你试过/Images/Pattern1.PNG
  • 哇哦。它适用于.PNG。这真的很奇怪。谢谢老兄。
  • Java 对文件可能有点“懒惰”(尤其是在 Windows 上),但嵌入式资源的命名完全正确

标签: java swing jar embedded-resource imageicon


【解决方案1】:

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

然而,一旦嵌入到 Jar 中,大小写匹配就变成了 EXACT。这是因为资源只是简单地添加到一个 zip 文件中,而 Java 使用 Zip 条目信息来查找内容。

确保您的命名是准确的以避免出现问题。试试/Images/Pattern1.PNG 而不是/Images/Pattern1.png

【讨论】:

  • 很好的解释。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2015-12-21
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多