Java jar文件已启动,图像丢失
可能重复: 最后,我使我的jar文件几乎正常工作。几乎是这样,因为当我测试它并在创建jar文件之后启动时,会出现一张包含在归档文件中的图片。但是,当我将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--
[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。