【问题标题】:ClassLoader.getResource() doesn't work from .jar fileClassLoader.getResource() 不适用于 .jar 文件
【发布时间】:2010-12-12 10:53:00
【问题描述】:

我有以下代码:

private final ImageIcon placeHolder = new ImageIcon(this.getClass().getClassLoader().getResource("Cards\\trans.png"));

但是一旦我的应用程序导出到 .jar 文件中,这将不起作用。

【问题讨论】:

标签: java image jar


【解决方案1】:

使用它来获取 jar 文件中的图像

ClassLoader.getSystemResource("images/Springz3.png"));

【讨论】:

  • 哦。嗯。哎呀。你不知道我找这个答案多久了。每个人都在说要使用 getResource(..),但这不适用于 jar 文件中的图像/声音!你必须使用 getSystemResource(..)!!!!!非常感谢这个答案!
  • 请不要提及。
【解决方案2】:

您的 "\t" 正在编译为选项卡 - 您需要对其进行转义:

private final ImageIcon placeHolder = new ImageIcon(
    this.getClass().getClassLoader().getResource("Cards\\trans.png"));

注意双反斜杠。当然,这可能不是唯一的错误 - 但这是一个开始......

事实上,我会用正斜杠来指定它。无论如何,它适用于 Windows 和基于 Unix 的操作系统,它也适用于 jar 文件。我强调双反斜杠的唯一原因是提高字符串转义点。试试这个:

private final ImageIcon placeHolder = new ImageIcon(
    this.getClass().getClassLoader().getResource("Cards/trans.png"));

接下来,确保您获得了准确正确的文件名称,包括大小写。尽管 Windows 文件系统通常不区分大小写,但 jar 文件是。如果它实际上是“cards”而不是“Cards”或“TRANS.png”而不是“trans.png”,它将不起作用。

【讨论】:

  • 您是否有理由在 ClassLoader 上调用 getResource 而不仅仅是类? (即不会 getClass().getResource() 工作?)
  • @JRL:如果你从类加载器调用它,它是相对于 jar 文件的根目录而不是类。不过,您可以使用前导斜杠从调用 Class.getResource 中获得相同的效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2013-08-17
  • 2012-10-27
相关资源
最近更新 更多