Centos7 离线安装字体fontconfig

一、问题:

开发部署web项目,会存在使用验证码的场景,在linux服务器部署可能会遇到如下错误:

Caused by: java.lang.reflect.InvocationTargetException: null
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
        at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:85)
        ... 83 common frames omitted
Caused by: java.lang.NullPointerException: Cannot load from short array because "sun.awt.FontConfiguration.head" is null
        at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
        at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:224)
        at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:106)
        at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:706)
        at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:358)
        at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:315)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
        at java.desktop/sun.font.SunFontManager.(SunFontManager.java:315)
        at java.desktop/sun.awt.FcFontManager.(FcFontManager.java:35)
        at java.desktop/sun.awt.X11FontManager.(X11FontManager.java:56)
        ... 89 common frames omitted

二、原因:

OpenJDK比OracleJDK简化了一些功能,所以后端绘制验证码所要用到Java的AWT组件就被简化了,结果报出空指针。

问题出现了,现在有三种解决思路:

  • 1、修改代码,后端只生成验证码内容,具体绘制交给前端
  • 2、更换为OracleJDK
  • 3、基于操作系统安装FontConfig组件

综合建议第3种是最快捷的处理方案。

三、Centos7 离线安装字体fontconfig

安装过程比较简单,请参考以下文章操作即可。linux 离线安装字体

说明:安装过程中要上传本地字体库至服务器。

你可能感兴趣的:(java,servlet,jvm)