NoClassDefFoundError: 无法初始化类 sun.awt.X11FontManager



当我们从Oracle JDK-8迁移到Open JDK-11时,Apache POI excel生成存在问题

已经尝试过-Djava.awt.headless=true

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1053)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)```

如果您使用的是 openjdk 的 docker 'slim images',则该镜像将不再包含 'fontconfig' 和 'libfreetype6' 包。

检查 openjdk:11-slim 的 docker 文件和 openjdk:8-slim 的 docker 文件中的区别。

您可以选择另一个 docker 镜像(例如 openjdk:11-windowsservercore (,或自己在 docker 文件中安装软件包:

RUN apt-get update && apt-get install -y fontconfig libfreetype6 && rm -rf /var/lib/apt/lists/*

潜在的问题是别的东西

我刚刚创建了一个简单的类,它执行 X11FontManager 的类加载以及当我运行时它抱怨

unable to link "libfreetype6"

一旦我使用

apt-get install libfreetype6

开始投掷无法链接"libfontconfig1.so">

apt-get install libfontconfig1

解决了问题

阅读本文并了解了几件事https://medium.com/azulsystems/using-jlink-to-build-java-runtimes-for-non-modular-applications-9568c5e70ef4

当您在高山版本中使用 openjdk docker 镜像时出现问题,例如:

adoptopenjdk/openjdk11:jre-11.0.11_9-alpine .

您需要 chenge 图像到完整版本:adoptopenjdk/openjdk11:jre-11.0.11_9 <</p>

div class="one_answers">
2021-06-23 03:44:37.950  INFO 1 --- [       Thread-7] ReportService   : Template path : /jasper/MgmtSummary.jrxml
Exception in thread "Thread-7" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)

当我使用docker镜像时,我遇到了上述错误gcr.io/distroless/java-debian10:11

当我将图像更改为adoptopenjdk/openjdk11时,此问题已修复

最新更新