Eclipse 导出的 Runnable JAR 不显示图像

2022-09-01 03:32:19

运行从 Eclipse 导出的 JAR 文件时,我的映像将无法加载。

我在资源类包中有图像。我也尝试过图像源文件夹,但没有运气。

从 Eclipse 加载时可以完美地工作。图像位于导出的 JAR 文件中,因此它们可以正常导出。

我试过了:

label.setIcon(new ImageIcon(MainFrame.class.getResource("/resources/header.jpg")));

我也试过:

URL url = getClass().getResource("/resources/header.jpg");
Image image = Toolkit.getDefaultToolkit().getImage(url);
label.setIcon(new ImageIcon(image));

和:

try
{
    label.setIcon(new  ImageIcon(ImageIO.read(getClass().getResource("/resources/header.jpg"))));
}
catch (IOException e1)
{
    e1.printStackTrace();
}

有什么建议吗?


答案 1

对我来说工作正常。检查您可能有什么不同之处。

示例 1:(src 中的资源)

步骤:

  1. 文件结构

    enter image description here

  2. 法典

    package com.stackoverflow.test;
    
    import java.net.URL;
    import javax.swing.*;  // Wild carded for brevity. 
                           // Actual code imports single classes
    public class Main {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    URL url = Main.class.getResource(
                                         "/resources/stackoverflow.png");
                    ImageIcon icon = new ImageIcon(url);
                    JFrame frame = new JFrame();
                    frame.add(new JLabel(icon));
                    frame.pack();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    }
    
  3. [右键单击项目] → [导出] → [可运行的 Jar 文件] → [设置启动配置]

    enter image description here

  4. 利润

    enter image description here

仅供参考,相同的设置在日食中运行也很好


示例 2:(资源不在 src 中 - 而是在项目中)

步骤:

  1. 文件结构(请注意,资源看起来像一个普通的文件夹)

    enter image description here

  2. 我们现在要做的是将资源放在构建路径上。这样做的作用是将文件夹中的所有内容(不包括文件夹本身)放在类路径上。

    • 右键单击该项目,然后转到[构建路径]→[配置构建路径]

      enter image description here

    • 在对话框的[源]选项卡中,选择[添加文件夹],然后在新对话框中选择[资源]文件夹

      enter image description here

    • 现在,资源文件夹的内容位于构建路径中(请注意文件夹中的小包。

      enter image description here

  3. 新代码不再使用资源前缀作为路径

    URL url = Main.class.getResource("/stackoverflow.png");
    
  4. 与上面的步骤3和4相同,并获利!


更新

设置启动配置

通常,一旦运行类(即右键单击类并作为Java应用程序运行),将设置运行配置。您需要将其设置为清单中的启动点。但这是手动操作的方法。

步骤:

  1. [右键单击项目] → [属性] → [运行/调试设置]

    enter image description here您可以看到我已经有一个运行配置(这是通过简单地运行类隐式设置的)。但要创建一个新应用程序,请选择[新建]→[Java应用程序]

  2. 为运行配置创建一个名称,然后浏览或键入一个主启动类。在我的情况下,它是类com.stackoverflow.test.Main

    enter image description here

  3. 现在,当您按照上面的示例进行导出时,您可以选择运行配置

    enter image description here

  4. 像上面一样运行罐子。


编辑

要检查的结果

清单:

Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: com.stackoverflow.test.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

提取罐:

enter image description here


答案 2

我发现当你改变时:

将所需的库打包到生成的 jar 中

将所需的库提取到生成的 jar 中

在设置启动配置中,它为我工作。

Extract Required Libraries Button


推荐