2011-04-18 130 views
1

我的程序中有一组5个图像。该程序将被编译为一个单独的.JAR文件,因此需要从中读取它们。然而,当我作出这样访问.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"))); 

调用它在IDE中进行测试时,在JMenuItem S中的图标作品(例如,jMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/bha/resources/icon.png")));将永久有效)和,但回报为null当编译为JAR文件。

+0

愚蠢的问题,但是,你确定图像被复制到jar文件,对不对? – MeBigFatGuy 2011-04-18 04:00:45

+0

假设的jar文件命名为bha.jar,试用./resources/Portal测试分庭17 - Part 1.png“ – Senthil 2011-04-18 04:01:51

+0

@MeBigFatGuy是的,我反编译'.JAR'文件并检查 – Supuhstar 2011-04-18 04:06:54

回答

1

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

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

仍然会抛出一个'NullPointerException',结果没有改变。 – Supuhstar 2011-04-18 04:19:26

+0

但是,这给了我使用空间名称的想法,而且工作得很好,谢谢。 – Supuhstar 2011-04-18 04:24:15