java - 启动 jar 文件,图像丢失

标签 java jar image

<分区>

Possible Duplicate:
load file within a jar

最后,我使我的 jar 文件几乎可以正常工作。几乎,因为当我测试它并在创建 jar 文件后立即启动时,会出现包含在存档中的图片。但是当我将 jar 文件移动到任何其他目录并尝试启动时 - 我收到关于丢失图片的异常(应用程序仍在运行,但不显示该图片)。

这是它在我的目录中的样子:

[aqv@voland Converter]$ ll
razem 112
-rw-rw-r--. 1 aqv aqv 51673 10-30 20:42 Converter.java
-rw-rw-r--. 1 aqv aqv    23 10-30 20:41 Converter.mf
-rw-rw-r--. 1 aqv aqv  1167 10-30 20:43 GBC.java
-rw-rw-r--. 1 aqv aqv  1023 10-30 20:58 ImagePanel.java
-rw-rw-r--. 1 aqv aqv 44729 10-30 20:35 programHelp.png
-rw-rw-r--. 1 aqv aqv  3713 10-30 20:43 SettingsManager.java
[aqv@voland Converter]$ 
[aqv@voland Converter]$ 

图片文件从 ImagePanel 调用,programHelp 是一个字符串,然后传递给适当的方法:

public ImagePanel() {

    programHelp = "programHelp.png";

    try {
        helpImage = ImageIO.read(new File(programHelp));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

如您所见,没有指定目录,所以我猜主类应该在 jar 的主目录中查找图像,不是吗?

我按以下方式创建 jar 文件(当然是在编译文件之后):

[aqv@voland Converter]$ jar cvfm Converter.jar Converter.mf *.class *.png
[aqv@voland Converter]$ 

图片文件在 jar 存档中可见,在类文件中。我的问题:在这种情况下图像文件放置有什么问题?

最佳答案

您的程序只是巧合 - 它实际上是从 JAR 的外部加载 PNG。如果愿意,您可以通过临时重命名图像但将 JAR 保留在目录中来对此进行测试。

要从 JAR 中加载资源,您需要使用 getResource() methods of a Class object 之一,而不是直接加载文件。

例如,您仍然可以使用 ImageIOgetResourceAsStream() 返回的流中加载数据。类似于以下内容:

InputStream is = this.getClass().getResourceAsStream("my.png");
helpImage = ImageIO.read(is);

关于java - 启动 jar 文件,图像丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147279/

相关文章:

java - Hibernate 和 H2 在建立实体管理器时出现错误 (Eclipse/Java)

javascript - 动态裁剪图像 css javascript/jquery

ubuntu - seleniumRC - 从哪里解压并运行 Java 程序?

java - Spring 启动 mongoDB jar

java - 如何让 Proguard 混淆 jar 文件中的 jar

Java - 将图像转换为黑白图像 - 失败并显示明亮的颜色

c# - 当它在asp.net中没有图像时如何使图像框不可见

java - Android - 删除数据库中的行

java - 如何从Firebase数据库Android获取子节点

java - java/groovy/python 是否有任何合理的 SSDP 或 DIDL Lib?