Java jar文件已启动,图像丢失

Java jar文件已启动,图像丢失,java,jar,image,Java,Jar,Image,可能重复: 最后,我使我的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--

可能重复:

最后,我使我的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之一,而不是直接加载文件

例如,您仍然可以使用ImageIO从getResourceAsStream返回的流加载数据。如下所示:

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

您的程序只是巧合地工作——它实际上是从JAR外部加载PNG。如果愿意,您可以通过临时重命名映像,但将JAR保留在目录中来测试这一点

要从JAR中加载资源,需要使用getResource之一,而不是直接加载文件

例如,您仍然可以使用ImageIO从getResourceAsStream返回的流加载数据。如下所示:

InputStream is = this.getClass().getResourceAsStream("my.png");
helpImage = ImageIO.read(is);
新文件。。。只查看文件系统,而不查看jar.new文件。。。只查看文件系统,而不查看jar。