Eclipse 导出的 Runnable JAR 不显示图像

Posted

技术标签:

【中文标题】Eclipse 导出的 Runnable JAR 不显示图像【英文标题】:Eclipse exported Runnable JAR not showing images 【发布时间】:2014-10-27 10:35:51 【问题描述】:

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

有什么建议吗?

【问题讨论】:

getClass().getResource("/resources/header.jpg"); 中删除/resources,因为当您构建应用程序的JAR 时,将没有/resources 目录。 resources 是否包含在构建路径中? 是的,它们在构建路径中,并且在查看 JAR 内容时位于 JAR 中... 【参考方案1】:

对我来说很好用。检查您可能有什么不同。

示例1:(资源in src)

步骤:

    文件结构

    代码

    package com.***.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/***.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);
                
            );
        
    
    

    【右键项目】→【导出】→【可运行的jar文件】→【设置启动配置】

    利润

仅供参考,同样的设置也可以在 eclipse 中运行


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

步骤:

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

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

    右击项目,进入【构建路径】→【配置构建路径】

    从对话框的 [Sources] 选项卡中,选择 [Add Folder],然后在新对话框中选择 [resources] 文件夹

    现在资源文件夹的内容在构建路径中(注意文件夹中的小包现在

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

    URL url = Main.class.getResource("/***.png");
    

    与上面的第 3 步和第 4 步相同,并且获利!


更新

设置启动配置

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

步骤:

    【右键项目】→【属性】→【运行/调试设置】

    您可以看到我已经有一个运行配置(这是通过简单地运行类隐式设置的)。但是要新建一个,选择【新建】→【Java应用】

    为运行配置创建一个名称并浏览或键入一个主启动类。就我而言,它是com.***.test.Main

    现在当你如上例所示导出时,选择运行配置

    像上面一样运行 jar。


编辑

检查结果

清单:

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

提取的罐子:

【讨论】:

@peeskillet 你能回答我的问题吗? ***.com/questions/38685537/… @peeskillet 拯救了我的一天。我正在探索我的代码以寻找可能的#bug。但意识到这是问题所在 我已经尝试了你发布的每一个解决方案,最后一个可行的方法是使用这个 Launcher.class.getResource() ,其中 Launcher 是我的主要功能。【参考方案2】:

关于从 Eclipse 创建一个可运行的 JAR 文件我们可以参考文章“Creating Runnable Jars in Eclipse (or other IDE...or by hand):” (https://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/RunnableJarsinEclipse.html),它提到我们需要做四件事作为

    确保为我们的代码创建一个包,而不仅仅是在 Eclipse 中创建一个项目 在我们代码的主包下为我们的资源文件创建子包(子文件夹)(注意子包在主包下,不只是在项目中) 从 getResource() 获取所有文件引用(获取 URL 引用) 在 Eclipse 中将文件导出为可运行的 JAR(文件 -> 导出... -> 选择可运行的 JAR 文件 -> 下一个 -> ...)

但是对于上篇示例代码中的图片文件,它只创建了ImageIcon,它没有创建SWT Image,关于如何从URL获取SWT Image或如何将ImageIcon转换为SWT Image,下面是从 URL 获取 SWT Image 的示例代码,

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();

【讨论】:

【参考方案3】:

问题是我的 Windows 配置文件中有这个项目...有一个“!”在其中...(DeNitE!-> 是我的 Windows 配置文件的名称)

一旦我将它更改为 DeNitE(没有!),它就可以正常工作...

【讨论】:

【参考方案4】:

我发现你改的时候:

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

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

在设置启动配置中它对我有用。

【讨论】:

【参考方案5】:

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

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

header 必须是 Image/BufferedImage。这将转到可运行 jar 所在的文件夹并查找名为资源的文件夹。 http://i.stack.imgur.com/x8xtO.png

【讨论】:

【参考方案6】:

两个简单的步骤:

1 - 将文件夹添加到构建路径;

2 - 使用这个:

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

【讨论】:

【参考方案7】:

另一种解决方法是,如果您将资源文件(一个 .jar 文件)放在同一位置,它应该可以工作。唯一的缺点是您必须始终拥有带有 jar 文件的资源。

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

【讨论】:

不,这是错误的。 5 分钟前刚刚测试过。【参考方案8】:

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

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

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

【讨论】:

以上是关于Eclipse 导出的 Runnable JAR 不显示图像的主要内容,如果未能解决你的问题,请参考以下文章

[转载]如何使用eclipse 生成runnable jar包

我用eclipse导出的runnable jar不能双击执行,但在命令行可以用java -jar ***.jar运行,这是怎么回事?

eclipse 导出Runnable JAR file ,双击无法执行原因与解决 双击后闪退的原因

Eclipse无法创建Runnable JAR文件

我用jar file(附带MANIFEST.MF)导出jar包可以运行 但是用Runnable jar file却说找不到类

关于IDEA导出项目jar包/runnable jar