首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringBoot Jar无法加载TrueType字体

SpringBoot Jar无法加载TrueType字体
EN

Stack Overflow用户
提问于 2019-07-11 07:07:51
回答 1查看 2.1K关注 0票数 3

当我想使用字体时,我发现了一种奇怪的行为,它包含在跳板脂肪罐中。在从/resources目录加载字体的本地机器上运行测试时,它工作得很好。但是,如果我用maven构建了一个应用程序并从终端运行它,那么我将收到如下消息:

代码语言:javascript
复制
java.io.IOException: Problem reading font data.
at java.awt.Font.createFont0(Font.java:1000)
at java.awt.Font.createFont(Font.java:877)

我试图找到一个解决办法,并做了以下工作:

  • 使用不同的字体(有时对损坏的桌子或某物有另一个错误)。
  • 构建了不同版本的docker openjdk容器来测试行为
  • 构建一个ubuntu容器,安装了openjdk
  • 使用debian映像,安装fc-cache,并通过提供字体
    • /usr/share/fonts/truetype/europlate
    • fc-cache -f -v

  • 创建了一个临时文件,只是为了确保jar中没有访问问题。
  • 从我的终端运行应用程序,加载字体也会失败。
  • 使用字体可以在编辑器上工作,甚至在应用程序从IDE运行时也是如此(没有测试)

方法:

代码语言:javascript
复制
     public Font getFont() throws IOException, FontFormatException {
        File f = File.createTempFile("dang", "tmp");
        assert f != null;
        f.delete();
        ClassLoader classLoader = getClass().getClassLoader();
        Font font = Font.createFont(Font.TRUETYPE_FONT, classLoader.getSystemResourceAsStream("EuroPlate.ttf"));
        font.deriveFont(105f);
        System.out.println(font.getFontName());
        return font;
    }

编辑: IDE运行应用程序-> works

终端运行应用程序->失败

堆栈跟踪:

代码语言:javascript
复制
java.io.IOException: Problem reading font data.
    at java.desktop/java.awt.Font.createFont0(Font.java:1183)
    at java.desktop/java.awt.Font.createFont(Font.java:1052)
    at components.NumberPlateUtility.getFont(NumberPlateUtility.java:81)
    at components.NumberPlateUtility.completeImage(NumberPlateUtility.java:173)
    at main.NumberplateClientCommands.one(NumberplateClientCommands.java:63)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:223)
    at org.springframework.shell.Shell.evaluate(Shell.java:169)
    at org.springframework.shell.Shell.run(Shell.java:134)
    at org.springframework.shell.jline.InteractiveShellApplicationRunner.run(InteractiveShellApplicationRunner.java:84)
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:783)
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:773)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230)
    at main.Main.main(Main.java:20)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

存储库:generator.git

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 10:42:12

此代码将起作用:

代码语言:javascript
复制
public Font getFont() throws IOException, FontFormatException {
        File f = File.createTempFile("dang", "tmp");
        assert f != null;
        f.delete();
        ClassLoader classLoader = getClass().getClassLoader();
        Font font = Font.createFont(Font.TRUETYPE_FONT, classLoader.getResourceAsStream("EuroPlate.ttf"));
        font.deriveFont(105f);
        System.out.println(font.getFontName());
        return font;
    }

注意classLoader.getResourceAsStream中的变化。请查看此answer以获得更多解释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56983460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档