登录验证码出不来 java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

在一台新安装的Ubuntu20.04.6服务器上安装了Java应用,登录时验证码出不来,后台报错:

Feb 18, 2025 6:28:20 AM com.tongweb.container.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [AUTH] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with 
root cause
java.lang.NullPointerException
        at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
        at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
        at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
        at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
        at sun.font.SunFontManager$2.run(SunFontManager.java:441)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.<init>(SunFontManager.java:386)
        at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
        at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
        at java.awt.Font.getFont2D(Font.java:491)
        at java.awt.Font.access$000(Font.java:224)
        at java.awt.Font$FontAccessImpl.getFont2D(Font.java:228)
        at sun.font.FontUtilities.getFont2D(FontUtilities.java:200)
        at sun.java2d.SunGraphics2D.checkFontInfo(SunGraphics2D.java:669)
        at sun.java2d.SunGraphics2D.getFontInfo(SunGraphics2D.java:835)
        at sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:50)
        at sun.java2d.pipe.ValidatePipe.drawString(ValidatePipe.java:165)
        at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2968)
        at com.tongtech.botress.am.management.handlers.management.api.resources.utils.CaptchaUtils.getImage(CaptchaUtils.java:127)
        at com.tongtech.botress.am.management.handlers.management.api.authentication.controller.TokenController.getCaptcha(TokenController.java:394)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)

缺少字体或字体配置文件会导致此类问题。可以通过以下命令安装必要的字体和字体配置工具:

sudo apt-get update
sudo apt-get install -y fontconfig ttf-dejavu

安装完成后,运行以下命令更新字体缓存:

sudo fc-cache -fv

然后重启Java应用,验证码可以出来了。

posted @ 2025-02-18 16:15  年迈的魔法师  阅读(175)  评论(0)    收藏  举报