java.library.path中没有fontmanager

以下代码在我的桌面上工作得很好:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setFont(new Font("SansSerif", Font.BOLD, 18)); Graphics2D graphics = (Graphics2D) g; graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); graphics.drawString(s, 5, 20); 

但是,当我在我的服务器上运行这个代码(在Docker容器内的Linux上运行的openjdk)时,会失败,并显示以下错误:

 java.lang.UnsatisfiedLinkError: no fontmanager in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:61) at java.security.AccessController.doPrivileged(Native Method) at sun.font.FontManagerNativeLibrary.<clinit>(FontManagerNativeLibrary.java:32) at sun.font.SunFontManager$1.run(SunFontManager.java:339) at java.security.AccessController.doPrivileged(Native Method) at sun.font.SunFontManager.<clinit>(SunFontManager.java:335) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:82) 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:180) at sun.java2d.SunGraphics2D.checkFontInfo(SunGraphics2D.java:669) at sun.java2d.SunGraphics2D.getFontInfo(SunGraphics2D.java:830) 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:2928) 

java -version(在我的服务器上)给出:

 openjdk version "1.8.0_77-internal" OpenJDK Runtime Environment (build 1.8.0_77-internal-alpine-r0-b03) OpenJDK 64-Bit Server VM (build 25.77-b03, mixed mode) 

我search了一个库文件,他们可以在这里find:

 /usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/libawt_headless.so /usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/libawt.so 

我遇到了运行Alpine Linux 3.4的完全相同的问题。 我按照这个github问题的指示解决了这个问题 :

  1. 安装带有GUI支持的JRE, openjdk8-jre而不是openjdk8-jre-head
  2. 安装fontconfigttf-dejavu软件包

我的Dockerfile中的RUN行如下所示:

 RUN apk add openjdk8-jre fontconfig ttf-dejavu 

在此之后,JDK能够自动加载默认字体,并且exception消失。