【问题标题】:Loading Images from Jar file only works on Development Machine?从 Jar 文件加载图像仅适用于开发机器?
【发布时间】:2014-06-02 10:10:09
【问题描述】:

我在加载 JAR 文件中包含的图像时遇到问题。我已经阅读了许多与此相关的其他帖子。但找不到答案。现在这里变得复杂了。如果我使用从 Eclipse 导出的 Runnable JAR 文件并使用标准 JRE 运行它,这一切都很好。然而,这个 JAR 文件实际上是一个名为 pro/ENGINEER 的软件的插件,它有自己的 JRE,用于运行 JAR 文件。奇怪的是..这在开发机器上工作正常,安装了eclipse等等,但在任何客户端机器上都不起作用?!但我看不出有什么不同。

我正在尝试使用以下方式加载图像:

ImageIcon icon = new ImageIcon(this.getClass().getResource("resources/Header.png");

这个方法是从我的“Start”类中调用的,Jar 的结构如下:

load
  Start.java
      load.resources
           Header.png

如果我用 WinRar 打开 Jar 文件,你可以看到 Image 肯定存在于 jar 中,在这个位置。

我知道这可能是一个非常具体的问题,但如果有人能提供任何帮助,那就太好了。

【问题讨论】:

  • 不工作的机器上的 jar 文件的路径中是否有特殊字符?
  • 我不明白,load.resources 是什么?它是一个名为load.resources 的目录还是结构load/resources 的两个目录或..?从根目录开始,Jar 中资源 (Header.png) 的完全限定路径和名称是什么?
  • 您好安德鲁感谢您的回复。 load.resources 是包名,所以 jar 中的结构是 load/resources。代码实际上很好,这是 Jlink/ProENGINEER 的问题。感谢您的回复。

标签: java eclipse jar embedded-resource imageicon


【解决方案1】:

我没有遇到您现在遇到的特定问题,但是过去我多次遇到在 JAR 文件中找不到资源的问题。

解决方案是不从 class 获取资源,而是从 class loader 获取资源,如下所示:

ImageIcon icon = new ImageIcon(this.getClass().getClassLoader().getResource("resources/Header.png"));

注意 getClass() 之后的 .getClassLoader() 调用。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多