3

自从从 OpenJDK 8 迁移到 OpenJDK 11.0.9 从openjdk:11-jdk-slim以来,我们就面临这个错误。

java.lang.NoClassDefFoundError: Could not initialize class sun.font.SunFontManager
        at java.desktop/sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:265)
        at java.desktop/sun.java2d.SunGraphics2D.getFontMetrics(SunGraphics2D.java:869)
$ java -version
openjdk version "11.0.9.1" 2020-11-04
OpenJDK Runtime Environment 18.9 (build 11.0.9.1+1)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1, mixed mode)

类似问题已在 RedHat 上注册:http: //bugzilla.redhat.com/show_bug.cgi?id= 1768935

但是,据我了解,我们并没有使用来自 RedHat 源代码的 JDK(即使 openjdk-11 项目是由他们构建和打包的,在被 AdoptOpenJDK 项目使用之前......)。

4

2 回答 2

1

作为一种解决方法,我们迁移到了Amazon Coretto 11,它目前基于以下版本。

$ java -version
openjdk version "11.0.9.1" 2020-11-04 LTS
OpenJDK Runtime Environment Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.9.12.1 (build 11.0.9.1+12-LTS, mixed mode)

没有错误。

于 2021-01-12T12:07:46.613 回答
0

使用 docker image 对我openjdk:11-jdk-slim有用的是安装fontconfig

并添加--add-exports java.desktop/sun.font=ALL-UNNAMED到jvm参数。例如:

ENV JAVA_OPTS="-server --add-exports java.desktop/sun.font=ALL-UNNAMED"

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS /app.jar" ]
于 2021-11-01T12:38:43.950 回答