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 ,双击无法执行原因与解决 双击后闪退的原因
我用jar file(附带MANIFEST.MF)导出jar包可以运行 但是用Runnable jar file却说找不到类