运行从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();
}
有什么建议吗?
答案 0 :(得分:76)
对我来说很好。检查你可能有什么不同。
步骤:
文件结构
代码
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);
}
});
}
}
[右键单击项目]→[导出]→[Runnable Jar文件]→[设置启动配置]
利润
仅供参考,同样的设置在eclipse中运行也很好
步骤:
文件结构(通知资源看起来像普通文件夹)
我们现在要做的是将资源放在构建路径上。这样做是将所有内容放在类路径中的文件夹中(文件夹本身除外)
右键单击项目并转到[Build Path]→[Configure Build Path]
从对话框的[来源]选项卡中选择[添加文件夹],然后在新对话框中选择[资源]文件夹
现在资源文件夹的内容位于构建路径中(注意文件夹中的小包装
新代码不再使用路径的资源前缀
URL url = Main.class.getResource("/stackoverflow.png");
与上面的步骤3和4相同,并且获利!
<强>更新强>
通常,一旦运行该类(即右键单击类并运行为Java应用程序),将设置运行配置。您需要将此设置为清单中的启动点。但这是如何手动完成的。
步骤:
[右键单击项目]→[属性]→[运行/调试设置]
您可以看到我已经有一个运行配置(通过简单地运行该类隐式设置)。但要创建新的,请选择[新建]→[Java应用程序]
为运行配置创建名称并浏览或键入主要启动类。就我而言,它是com.stackoverflow.test.Main
类
现在,如上例所示导出时,选择运行配置
像上面一样运行jar。
修改强>
清单:
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:
答案 1 :(得分:2)
答案 2 :(得分:1)
为了从Eclipse创建可运行的JAR文件,我们可以参考文章&#34;在Eclipse中创建Runnable Jars(或其他IDE ......或手工):&#34; (https://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/RunnableJarsinEclipse.html),它提到我们需要做四件事
但是对于上面文章示例代码中的图像文件,它只创建了ImageIcon,它没有创建SWT图像,互联网上有很多关于如何从URL获取SWT图像或如何将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();
}
答案 3 :(得分:1)
我有同样的问题.. 你可以用这个..
Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg"))
这里WE4是我的类构造函数名称。 希望它有所帮助。
答案 4 :(得分:0)
问题是我的Windows配置文件中有这个项目......有一个“!”在它...(DeNitE! - &gt;是我的Windows个人资料的名称)
一旦我将其更改为DeNitE(没有!),它工作得很好......
答案 5 :(得分:0)
除非你必须在jar中拥有文件,否则这可能是最简单的方法:
header = ImageIO.read(new File("./resources/header.jpeg"));
标头必须是Image / BufferedImage。这将转到runnable jar所在的文件夹,并查找名为resources的文件夹。 http://i.stack.imgur.com/x8xtO.png
答案 6 :(得分:0)
另一种解决方法是,如果将资源文件,.jar文件放在同一位置,它应该可以正常工作。唯一的缺点是你必须始终拥有jar文件的资源。
如果这不是问题,你可以这样做。