微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Eclipse 创建 JAR 文件后,图像未出现在 JAR 文件中

如何解决使用 Eclipse 创建 JAR 文件后,图像未出现在 JAR 文件中

我找不到有效的答案,所以我不得不在这里提问。我有包含内容的闪屏文件

    JLabel image=new JLabel(new ImageIcon("./image/risk.jpg"));    

文件夹结构如下

folder structure

但是出于某种原因,当我去创建这样的 jar 文件

Jar file creation

图像没有出现在 jar 文件中。我查看了许多其他答案,但它们似乎不起作用。我非常感谢专家的眼光告诉我我错过了什么。提前致谢

解决方法

new ImageIcon("./image/risk.jpg")

图像没有出现在 jar 文件中

不合逻辑。图像文件是否在该 jar 中无关紧要; 这不适用于 jar 文件,句号

那个 ImageIcon 构造函数接受一个文件参数。此处的文件是字面意思:它指的是实际磁盘上文件的路径。你选择.,意思是:当前的工作目录,因此失去了稳定应用程序的所有机会;当前工作目录是 JVM 开始的任何目录,因此不可靠。即使你挥动魔杖解决了这个问题,下一个更紧迫的问题是任何地方都没有 risk.jpg 文件——它是一个 jar 文件中的一个条目,它本身不是一个文件。只是罐子里的一个条目。

解决办法

解决方案不是使用那个构造函数,而是依靠java的资源检索系统:

class MyClass {
    public void foo() {
        URL url = MyClass.class.getResource("risk.jpg");
    }
}

这会为您提供一个表示资源的 URL(可能是一个实际的文件,但也可能是磁盘、网络、数据库中动态生成的条目 - 无论类加载器提供什么。如果您没有” t 与自定义类加载器混淆,它始终是磁盘上的文件,或 jar 文件中的条目),并且这也可以传递给 ImageIcon(它还有一个接受 URL 的构造函数)。>

然后查找名为 risk.jpg 的文件,该文件位于 MyClass.class 所在的位置。无论是在磁盘上的某个地方,还是在 jar 文件中(因此,如果它在 package com.foo; 中,则您有一个条目为 com/foo/MyClass.class 的 jar 文件,然后该命令将找到条目 com/foo/risk.jpg在同一个 jar 文件中。您可以使用前缀斜杠从 jar 的根开始:MyClass.class.getResource("/image/risk.jpg")(注意,没有前导点!)将在该 jar 中查找条目 image/risk.jpg

太好了!呃,但是,那个图像应该在罐子里,对吧?

是的,此代码将确保您查看类文件所在的位置,这很好,但您仍需要确保正确设置构建。 'let eclipse make a jar' 是不是推荐的构建解决方案;花一些时间学习 maven 或 gradle。但是,如果您坚持,eclipse 应该只包含它们,但是将 jpg 放在源目录中,就在您的 java 文件旁边(eclipse 知道要复制非 java 文件,并且要编译 java 文件)。

换句话说,如果您坚持使用 eclipse 的“make a jar”作为构建工具,则 image 必须移至 src

或者,建立一个基本的maven项目,其中source在src/main/java中,图片文件等在src/main/resources中,使用eclipse中的maven插件读取基于maven的项目,然后如果您出于某种原因希望这些目录完全分开,那也可以。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。