【问题标题】:Loading font as resource fails in jar将字体作为资源加载在 jar 中失败
【发布时间】:2018-07-02 01:28:26
【问题描述】:

我正在使用从资源加载的自定义字体。此代码在 Eclipse 中完美运行,但作为 jar 运行时会出错。

try {
     java.io.InputStream inputStream = getClass().getResourceAsStream("/fonts/xkcd.ttf");
     iybfont = Font.createFont(Font.PLAIN, inputStream); //CRASHES ON THIS LINE
 } catch (Exception e) {
        e.printStackTrace();
        System.out.println(e);
}

当作为 jar 运行时,它会给出以下错误(来自命令提示符窗口):

java.io.IOException: Problem reading font data.
    at java.awt.Font.createFont0(Unknown Source)
    at java.awt.Font.createFont(Unknown Source)
    at vbday.Start.initialize(Start.java:83)
    at vbday.Start.<init>(Start.java:45)
    at vbday.Start.main(Start.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

第 83 行显示在上面的注释中

【问题讨论】:

  • @AndrewThompson 其余的大部分与手头的实际问题无关。下次我会记住布局管理器之类的东西,但它们目前与手头的问题无关
  • 哦!哎呀,我没有意识到字体加载实际上是失败的,而 println 是什么生成了部分错误消息。明天我将使用堆栈跟踪更新错误代码!所以我想真正的问题是字体资源没有加载到 jar 中
  • @AndrewThompson 好吧,我对问题进行了重大修改,包括添加堆栈跟踪和删除不相关的代码。据我所知,文件路径是正确的。 (毕竟它会在 Eclipse 中加载)
  • 呸,没关系。弄清楚了。扩展名应该是“.TTF”而不是“.ttf”。感谢您的指导,帮助我找出实际问题

标签: java fonts nullpointerexception embedded-resource ioexception


【解决方案1】:

问题在于文件名大小写。 Eclipse 显然纠正了扩展中的错误大小写,但最终的 jar 没有。

.getResourceAsStream("/fonts/xkcd.ttf"); 更改为.getResourceAsStream("/fonts/xkcd.TTF");

【讨论】:

  • 很高兴你把它整理好了。加一个用于报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 2018-01-15
  • 2013-02-26
  • 2019-05-28
  • 2016-06-24
相关资源
最近更新 更多