java - 无法在 JRE 8 中加载字体

标签 java fonts awt java-8

我无法从 JRE 8 中的 S3 Inputstream 加载字体。如果系统安装了 JRE 7、JDK 7 甚至 JDK 8,我没有问题。

val fontInputStream = s3Client.getObject(bucketName, objectKey).getObjectContent

val customFont = Font.createFont(Font.TRUETYPE_FONT, fontInputStream).deriveFont(Font.TRUETYPE_FONT, 20F)

我得到的错误是

Exception in thread "main" java.io.IOException: Problem reading font data.
        at java.awt.Font.createFont0(Font.java:1000)
        at java.awt.Font.createFont(Font.java:877)
        at Main$.delayedEndpoint$Main$1(Main.scala:31)
        at Main$delayedInit$body.apply(Main.scala:11)
        at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
        at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
        at scala.App$$anonfun$main$1.apply(App.scala:76)
        at scala.App$$anonfun$main$1.apply(App.scala:76)
        at scala.collection.immutable.List.foreach(List.scala:381)
        at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
        at scala.App$class.main(App.scala:76)
        at Main$.main(Main.scala:11)
        at Main.main(Main.scala)

我试图将输入流加载到临时文件中,但没有帮助。我还尝试直接从本地文件加载字体,但在获取字体元数据时遇到了不同的错误。这是错误日志。

Exception in thread "main" 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:776)
        at sun.font.SunFontManager$2.run(SunFontManager.java:431)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.<init>(SunFontManager.java:376)
        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:422)
        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.<init>(Font.java:614)
        at java.awt.Font.createFont(Font.java:1056)
        at Main$.delayedEndpoint$Main$1(Main.scala:32)
        at Main$delayedInit$body.apply(Main.scala:11)
        at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
        at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
        at scala.App$$anonfun$main$1.apply(App.scala:76)
        at scala.App$$anonfun$main$1.apply(App.scala:76)
        at scala.collection.immutable.List.foreach(List.scala:381)
        at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
        at scala.App$class.main(App.scala:76)
        at Main$.main(Main.scala:11)
        at Main.main(Main.scala)

因此,这不是输入流的问题,而是 JRE 8 中字体本身的加载问题。

这似乎是 JRE 8 字体中的错误。

我正在加载用于在图片中绘制字符串的字体。 我的代码使用图像 java:7-jre (ok)、java:7-jdk (ok)、java:8-jre (fail)、java:8-jdk (ok) 在 Docker 容器中运行。

最佳答案

我在使用 openjdk:8-jre-alpine 时遇到了同样的错误。切换到 openjdk:8-jre 有帮助。

--- FROM openjdk:8-jre-alpine
+++ FROM openjdk:8-jre

关于java - 无法在 JRE 8 中加载字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626136/

相关文章:

java - 在数组列表中的某个位置设置和添加项目时的首选项

java - 从 JPanel 获取高分辨率图像

java - NimbusLookAndFeel 无法解析为变量

Java图形,什么也没有显示

Java 8 流 : convert comma separated string to the list of abstract Enum

java - 如何安装JMapViewer

linux - gnuplot gif 无法使用 ttf 字体缩放

java - Arial字体的跨平台解决方案

java - 在 OSGi 中,传递服务引用是一种好的做法还是应该由 bundle 自行查找?

linux - Graphviz 找不到任何字体