【问题标题】:Accessing images in a .JAR file访问 .JAR 文件中的图像
【发布时间】:2011-08-07 14:08:30
【问题描述】:

我的程序中有一组 5 张图片。该程序将被编译为单个.JAR 文件,因此需要从其中读取它们。但是,当我打电话时

images = new ArrayPP<ImageIcon>(
          new ImageIcon(getClass().getResource("/bha/resources/Portal Test Chamber 17 - Part 1.png")),
          new ImageIcon(getClass().getResource("/bha/resources/Portal Test Chamber 17 - Part 2.png")),
          new ImageIcon(getClass().getResource("/bha/resources/Portal Test Chamber 17 - Part 3.png")),
          new ImageIcon(getClass().getResource("/bha/resources/revit logo - glass.png")),
          new ImageIcon(getClass().getResource("/bha/resources/The All-Knowing Octopus.png")));

适用于 JMenuItems 中的图标(例如,jMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/bha/resources/icon.png"))); 将始终有效)以及在 IDE 中进行测试时,但在编译为 JAR 文件时返回为 null。

【问题讨论】:

  • 愚蠢的问题,但是,您确定图像已复制到 jar 文件中,对吗?
  • 假定 jar 文件名为 bha.jar,尝试使用 ./resources/Portal Test Chamber 17 - Part 1.png"
  • @MeBigFatGuy 是的,我反编译了.JAR 文件并检查了
  • @Senthil 他们在一个名为“Blue Husky Art”的.JAR 文件中,在包bha.resources 中。我会试试你的 dot-hack 方法
  • 我完全是凭直觉,但您可以尝试重命名文件以使其中没有空格。

标签: java image jar


【解决方案1】:

鉴于 getResource 返回一个 URL,我猜它不喜欢空格。作为测试,我会尝试做

new ImageIcon(getClass().getResource(URLEncoder.encode("/bha/resources/Portal Test Chamber 17 - Part 1.png", "UTF-8"))),

【讨论】:

  • 这仍然会引发NullPointerException。结果不变。
  • 然而,这给了我使用无空格名称的想法,并且奏效了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2011-07-07
  • 2016-03-18
  • 2011-01-23
  • 1970-01-01
  • 2013-12-13
  • 2021-01-06
相关资源
最近更新 更多