Java图像未出现在JAR文件中

时间:2013-10-21 21:07:39

标签: java image embedded-resource

这是我如何称呼图像

Icon logoOne = new ImageIcon("logo.png");
// LOGO
JLabel imageLogo = new JLabel(logoOne); 
imageLogo.setPreferredSize(new Dimension(200, 50));

它刚刚添加到JFrame中的一个面板中,并且在eclipse中运行时工作正常,但在导出到JAR时不会显示。

任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

导出JAR文件时,您必须确保在JAR文件中也包含图像文件。例如:如果您有一个名为“res”的文件夹,其中包含图像,则必须选中此文件夹前的复选框,以确保此文件夹和图像被包含在内。

您可能想要添加一些问题来解决代码问题。例如:如果此图像文件存在,则添加一些在控制台中打印的代码。导出JAR文件,通过控制台/终端运行JAR并检查结果。如果这显示图像不存在,则表示导出的JAR文件存在问题。

您可能希望尝试将图像作为资源流,尝试尝试以下代码示例:

java.net.URL logoOneUrl = getClass().getResource("logo.png");
Icon logoOne = new ImageIcon(logoOneUrl );

答案 1 :(得分:0)

不要将您的图像作为文件获取,因为您目前正在这样做。而是将其作为资源。如果您搜索此网站,您会发现每周发生2-4次的类似问题。

即,

String imageResource = //.... string to image resource path
Image myImage = ImageIO.read(getClass().getResourceAsStream(imageResource));
Icon logo = new ImageIcon(myImage);

请注意,imageResource String是表示图像资源路径的String。这将取决于您的图像保存在jar文件中的位置以及它与类文件的相对位置,这是我们目前不知道的信息。

答案 2 :(得分:0)

致电时

Icon logoOne = new ImageIcon("logo.png");

您正在从文件中读取图像(请参阅javadoc)。导出到jar时,此文件不再可用,因此您需要使用ClassLoader#getResourceFromClasspath()或使用其他构造函数之一。

答案 3 :(得分:0)

这取决于您如何将图像添加到jar文件中。

在正常情况下,图像位于您的一个源文件夹中,eclipse负责将其导出到Jar文件中。如果是这种情况,您可以通过ClassLoader加载。有几种方法可以做到这一点。我主要使用this.getClass().getResourceAsStream("logo.png")。如果你只使用标准的类加载器(这是正常情况),这将起作用。