jdk8 报错 java.lang.NullPointerException sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1

异常如下
java.lang.NullPointerException
sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
sun.awt.FontConfiguration.init(FontConfiguration.java:107)
sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
sun.font.SunFontManager$2.run(SunFontManager.java:441)
java.security.AccessController.doPrivileged(Native Method)
sun.font.SunFontManager.(SunFontManager.java:386)
sun.awt.FcFontManager.(FcFontManager.java:35)
sun.awt.X11FontManager.(X11FontManager.java:57)
sun.reflect.GeneratedConstructorAccessor513.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:423)
java.lang.Class.newInstance(Class.java:442)
sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
java.security.AccessController.doPrivileged(Native Method)
sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
java.awt.Font.getFont2D(Font.java:491)
java.awt.Font.canDisplayUpTo(Font.java:2064)
java.awt.font.TextLayout.singleFont(TextLayout.java:470)
java.awt.font.TextLayout.(TextLayout.java:531)
问题原因

出现这个问题,一般是因为我们用 jdk 是精简过体积的 jdk 比如各种docker 镜像里面依赖的 jdk-slim,这里面为了减少jdk 包的体积会去掉这些内置字体资源,如果遇到你的应用又需要使用这些字体的情况,就会报错。

解决方案

只需要 os 上安装依赖下面两个依赖库即可,以 ubuntu 为例:

apt-get install -y ttf-dejavu fontconfig

扩展知识

ttf-dejavu 是开源的字体库, 通常和 fontconfig 配合使用

TTF-DejaVu

是一个开源的 TrueType 字体集合,它包含了多种语言的字符,特别是那些在其他字体中不常见的字符。DejaVu 字体项目旨在创建一个字体集合,它能够显示 Unicode 标准中的大部分字符,并且尽可能地保持字体的一致性。

Fontconfig

是一个用于配置和自定义字体的系统,它允许用户指定字体的优先级、替代字体以及字体的缓存等。Fontconfig 广泛用于 Unix-like 系统,包括 Linux 和 macOS。它通过一个配置文件(通常位于 /etc/fonts/fonts.conf)来管理字体的设置,并且可以与多种桌面环境和应用程序集成,以提供一致的字体体验。

DejaVu 字体与 Fontconfig 结合使用,可以为用户提供一个更加丰富和灵活的字体选择,特别是在需要显示多种语言和特殊字符时。用户可以通过 Fontconfig 来设置 DejaVu 字体作为默认字体,或者在特定的应用程序中使用 DejaVu 字体来显示特定的字符集。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值