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中的资源)
脚步:
-
文件结构
-
码
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); } }); } }
-
[右击项目]→[导出]→[可运行JAR文件]→[设置启动configuration]
-
利润
仅供参考,相同的设置在Eclipse中运行也很好
例2 :(资源不在 src – 但在项目中)
脚步:
-
文件结构(注意资源看起来像一个普通的文件夹)
-
我们现在要做的是把资源放在构buildpath上。 这样做是把所有的东西都放在classpath中的文件夹(不包括文件夹本身)上
-
右键单击该项目并转到[Build Path]→[Configure Build Path]
-
在对话框的[Sources]选项卡中,select[Add Folder],在新对话框中select[resources]文件夹
-
现在资源文件夹的内容在构buildpath中(现在注意文件夹中的小包装
-
-
新代码不再使用path的资源前缀
URL url = Main.class.getResource("/stackoverflow.png");
-
与上面的步骤3和步骤4相同,并获利!
UPDATE
设置启动configuration
一般来说,一旦你运行类(即右键单击类和运行Java应用程序),运行configuration将被设置。 您需要将其设置为清单中的启动点。 但是,这里是如何手动完成的。
脚步:
-
[右键项目]→[属性]→[运行/debugging设置]
你可以看到我已经有一个运行configuration(这是从简单的运行类隐式设置)。 但要创build一个新的,请select[新build]→[Java应用程序]
-
为运行configuration创build一个名称并浏览或input主要的启动类。 在我的情况下,它的
com.stackoverflow.test.Main
类 -
现在,如上例所示,当您导出时,请select运行configuration
-
像上面那样运行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 ),它提到我们需要做四件事情
- 确保为我们的代码创build一个包,而不仅仅是在Eclipse中创build一个项目
- 在我们的代码的主包下为我们的资源文件创build子包(子文件夹)(请注意,子包在主包中,不仅在项目中)
- 从getResource()获取所有文件引用(获取URL引用)
- 在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是我的类构造函数名称。 希望它有帮助。