Eclipse导出的Runnable JAR不显示图像

运行从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(); } 

有什么build议么?

为我工作得很好。 检查你可能有什么不同。

例子1 🙁 src中的资源)

脚步:

  1. 文件结构

    在这里输入图像描述

  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文件]→[设置启动configuration]

    在这里输入图像描述

  4. 利润

    在这里输入图像描述

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


例2 :(资源不在 src – 但在项目中)

脚步:

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

    在这里输入图像描述

  2. 我们现在要做的是把资源放在构buildpath上。 这样做是把所有的东西都放在classpath中的文件夹(不包括文件夹本身)上

    • 右键单击该项目并转到[Build Path]→[Configure Build Path]

      在这里输入图像描述

    • 在对话框的[Sources]选项卡中,select[Add Folder],在新对话框中select[resources]文件夹

      在这里输入图像描述

    • 现在资源文件夹的内容在构buildpath中(现在注意文件夹中的小包装

      在这里输入图像描述

  3. 新代码不再使用path的资源前缀

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


UPDATE

设置启动configuration

一般来说,一旦你运行类(即右键单击类和运行Java应用程序),运行configuration将被设置。 您需要将其设置为清单中的启动点。 但是,这里是如何手动完成的。

脚步:

  1. [右键项目]→[属性]→[运行/debugging设置]

    在这里输入图像描述 你可以看到我已经有一个运行configuration(这是从简单的运行类隐式设置)。 但要创build一个新的,请select[新build]→[Java应用程序]

  2. 为运行configuration创build一个名称并浏览或input主要的启动类。 在我的情况下,它的com.stackoverflow.test.Main

    在这里输入图像描述

  3. 现在,如上例所示,当您导出时,请select运行configuration

    在这里输入图像描述

  4. 像上面那样运行jar子。


编辑

结果检查

performance:

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

提取jar子:

在这里输入图像描述

我发现当你改变时:

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

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

在设置启动configuration它为我工作。

提取所需的库按钮

为了从Eclipse创build一个可运行的JAR文件,我们可以参考文章“在Eclipse(或其他IDE …或手工创build)中创buildRunnable Jar:”( https://www.cefns.nau.edu/~edo/Classes /CS477_WWW/Docs/RunnableJarsinEclipse.html ),它提到我们需要做四件事情

  1. 确保为我们的代码创build一个包,而不仅仅是在Eclipse中创build一个项目
  2. 在我们的代码的主包下为我们的资源文件创build子包(子文件夹)(请注意,子包在主包中,不仅在项目中)
  3. 从getResource()获取所有文件引用(获取URL引用)
  4. 在Eclipse中导出文件作为可运行的JAR(文件 – >导出… – >select可运行的JAR文件 – >下一步 – > …)

但是对于上面文章的示例代码中的图像文件,它只创build了ImageIcon,并没有创buildSWT Image,而且在因特网上有很多关于如何从URL获取SWT Image或者如何将ImageIcon转换为SWT Image的问题,下面是从URL获取SWT图像的示例代码,

 Image imgSWT=null; // Image class is the SWT Image class ImageDescriptor imgDesc=null; java.net.URL imgURL = YourClassName.class.getResource("path/image_filename"); if (imgURL != null) { imgDesc = ImageDescriptor.createFromURL(imgURL); imgSWT = imgDesc.createImage(); } 

另一个解决方法是如果你把你的资源文件,你的.jar文件放在同一个位置,它应该工作。 唯一的缺点是你必须始终有jar文件的资源。

如果这不是问题,你可以这样做。

问题是我有我的Windowsconfiguration文件中的这个项目…有一个“!” 在…(DeNitE! – >是我的Windowsconfiguration文件的名称)

只要我改变它DeNitE(没有!)它工作正常…

除非你必须在jar中有你的文件,否则这可能是最简单的方法:

header = ImageIO.read(new File("./resources/header.jpeg"));

标题必须是一个Image / BufferedImage。 这转到可运行jar所在的文件夹并查找名为resources的文件夹。 http://i.stack.imgur.com/x8xtO.png

两个简单的步骤:

1 – 将文件夹添加到生成path;

2 – 使用这个:

  InputStream url = this.getClass().getResourceAsStream("/load04.gif"); myImageView.setImage(new Image(url)); 

我有同样的问题..你可以使用这个..

 Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg")) 

这里WE4是我的类构造函数名称。 希望它有帮助。