0

这是我如何称呼图像

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

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

谁能帮忙?

4

4 回答 4

1

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

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

您可能想尝试将图像作为资源流来获取,请尝试以下代码示例:

java.net.URL logoOneUrl = getClass().getResource("logo.png");
Icon logoOne = new ImageIcon(logoOneUrl );
于 2013-10-21T21:11:44.907 回答
0

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

IE,

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

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

于 2013-10-21T21:10:44.080 回答
0

你打电话时

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

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

于 2013-10-21T21:11:37.460 回答
0

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

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

于 2013-10-21T21:11:58.537 回答