【问题标题】:Images not showing in Jar图像未显示在 Jar 中
【发布时间】:2013-03-26 22:46:23
【问题描述】:

我的程序在 Eclipse 中完美运行,但是当我导出它时,图像不显示。

我的设置看起来像

src
..gui
....Main.java
....menus
......MenuMain.java
res
...Logo.png

我从 MenuMain.java 引用 Logo.png,我尝试了很多方法;

  • res/Logo.png
  • /res/Logo.png
  • .res/Logo.png
  • ../../Logo.png
  • ++++

前 3 个在 Eclipse 中工作,但在 Jar 中均不工作。我检查了 Jar 文件,res 文件夹在那里,所有的图像也在那里。我还尝试编辑 MANIFEST.MF 并添加了 Class-Path:

但它仍然不起作用。运行 Jar 时我没有收到任何错误,其他所有内容都显示文件(按钮、标签、++)

编辑: 我使用的是带有 GridBagLayout 的 JPanel,我将 ImageIcon 添加到 JLabel 以便能够将其添加到 JPanel。最初我使用类似的东西:

JLabel logo = new JLabel(new ImageIcon("res/Logo.png")); 

但我也尝试了其他变体,例如:

JLabel logo = new JLabel(new ImageIcon(MenuMain.class.getClassLoader().getResource("/res/Logo.png")));

也可以通过getResourceAsStream()

只有第一个在 Eclipse 中有效,但在 Jar 中不显示。其他的只是崩溃(NullPointer)

【问题讨论】:

  • 这是 Swing 吗?您可以发布与读取/渲染图像相关的 sn-p 吗?
  • 从 jar 运行时,通常 src 文件夹的编译内容和 res 文件夹的所有内容需要放在一起。然后你只需从类路径加载。
  • @asgs 在主帖中添加了更多信息
  • @LeeMeador:是的,我检查了最终的jar文件,它仍然与我给出的路径一致;根目录中有一个 res 文件夹,其中包含所述图像。

标签: java eclipse jar packages embedded-resource


【解决方案1】:

您需要在 jar 中包含 Logo.png,并使用 ClassLoader.getResourceAsStream() 从类路径加载资源

一般模式是:

...
InputStream resource = className.class.getResourceAsStream("/res/Logo.png");
Image image = ImageIO.read(resource);
// do your display stuff here...
...

【讨论】:

  • 我的罐子里有 Logo.png。而且我还尝试了您的代码的至少 10 种变体,但是我无法在 eclipse 中运行它(没有尝试导出它,所以我不知道这是否有效)。
  • 好的,那就用getResourceAsStream()代替FileInputStream
  • InputStream 资源 = MenuMain.class.getResourceAsStream("/res/Logo.png"); JLabel 标志 = 新 JLabel();尝试 { logo = new JLabel(new ImageIcon(ImageIO.read(resource))); } catch (IOException e) { e.printStackTrace();在线程“main”中给出异常 java.lang.IllegalArgumentException: input == null!
  • (我尝试了各种路径变体,就像我在原始帖子中列出的那些,但是当我使用 getResourceAsStream 时它永远找不到它)
  • @PaulProgrammer - 您的代码示例与您要求 OP 使用的方法不匹配,这可能是它对他不起作用的原因。代码应该更像这样 - MenuMain.class.getClassLoader().getResourceAsStream("/res/Logo.png");.
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 2012-04-01
  • 2016-02-09
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 2015-10-30
  • 2011-07-02
相关资源
最近更新 更多