如何在Spring环境中安装JRE字体以解决No fonts found错误
Spring环境下解决JRE物理字体缺失问题
错误日志:
2023-07-19 14:32:09,621 ERROR [org.springframework.boot.web.servlet.support.ErrorPageFilter] (default task-3) 因异常[Probable fatal error: No physical fonts found.],从请求[/simpleCaptchaImg]转发至错误页面:java.lang.Error: Probable fatal error: No physical fonts found. at java.desktop/sun.font.SunFontManager.lambda$getDefaultPhysicalFont$0(Unknown Source) at java.base/java.util.Optional.orElseThrow(Unknown Source) at java.desktop/sun.font.SunFontManager.getDefaultPhysicalFont(Unknown Source) at java.desktop/sun.font.CompositeFont.doDeferredInitialisation(Unknown Source) at java.desktop/sun.font.CompositeFont.getSlotFont(Unknown Source) at java.desktop/sun.font.CompositeGlyphMapper.initMapper(Unknown Source) at java.desktop/sun.font.CompositeGlyphMapper.<init>(Unknown Source) at java.desktop/sun.font.CompositeFont.getMapper(Unknown Source) at java.desktop/sun.font.StandardGlyphVector.init(Unknown Source) at java.desktop/sun.font.StandardGlyphVector.<init>(Unknown Source) at java.desktop/java.awt.Font.createGlyphVector(Unknown Source)
这个错误是因为JRE无法找到可用的物理字体,常见于无图形界面的服务器环境(如Docker、Linux服务器)或JRE安装包未包含字体文件的场景。以下是三种可行的解决方法:
方案一:安装系统字体(Linux服务器适用)
- 安装通用字体包,比如DejaVu字体:
# Debian/Ubuntu 系列系统 apt-get update && apt-get install -y fonts-dejavu-core # RHEL/CentOS 系列系统 yum install -y dejavu-sans-fonts - 安装完成后重启Spring应用,JRE会自动识别系统中的字体。
方案二:手动添加字体到JRE目录
- 准备一个TrueType格式的字体文件(例如
simhei.ttf、arial.ttf) - 定位JRE的字体目录:
- JDK 8及以下:
$JAVA_HOME/jre/lib/fonts - JDK 9及以上:
$JAVA_HOME/lib/fonts
- JDK 8及以下:
- 将字体文件复制到上述目录
- 执行命令更新字体缓存:
fc-cache -fv - 重启Spring应用即可生效
方案三:通过JVM参数指定自定义字体路径
- 在应用启动时添加JVM参数,指定字体目录:
-Djava.awt.fonts=/path/to/your/custom/fonts - 或者在Spring Boot启动类的
main方法中设置系统属性:public static void main(String[] args) { System.setProperty("java.awt.fonts", "/path/to/your/custom/fonts"); SpringApplication.run(YourApplication.class, args); }
内容的提问来源于stack exchange,提问作者ZZZ
相关产品推荐
相关产品推荐

