Kann nicht laden Sie die schriftart in JRE 8
Ich kann nicht laden Sie eine schriftart aus einem S3-Inputstream in JRE 8. Ich habe keine Problem, wenn ein system installiert ist, mit JRE 7, JDK 7, oder sogar JDK 8.
val fontInputStream = s3Client.getObject(bucketName, objectKey).getObjectContent
val customFont = Font.createFont(Font.TRUETYPE_FONT, fontInputStream).deriveFont(Font.TRUETYPE_FONT, 20F)
Den Fehler, dass ich habe ist
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)
Habe ich versucht zu laden, den inputstream an einen temp-Datei, aber es hilft nicht. Ich habe auch versucht, laden Sie eine schriftart, die direkt aus einer lokalen Datei, aber ich bekam eine andere Fehlermeldung bekommen font-Metadaten. Hier ist das Fehlerprotokoll.
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)
So, dies ist nicht ein problem mit inputstream, sondern mit dem laden der schriftart selbst in JRE 8.
Dies scheint ein bug in JRE 8 Font.
Ich bin laden Sie eine schriftart, die zum zeichnen einer Zeichenfolge in einem Bild.
Mein code wird in einen Docker-container mit Bildern, die java-7-jre (ok), java:7-jdk (ok), java:8-jre (fail), java:8-jdk (ok).
- und was ist die URL für die schriftart? Sie möchten möglicherweise führen Sie es durch TTX, und sehen, ob das wirft Fehler, sowie laden Sie es in Font Forge, die ist auch eher pingelig, wenn es darum geht, zu sagen, Sie die schriftart, die Sie laden, hat schlechte Werte irgendwo.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Traf ich mit dem gleichen Fehler im openjdk:8-jre-alpine. Wechsel auf openjdk:8-jre auch geholfen. (apt-get-Zeile scheint nicht notwendig)
Es stellt sich heraus, dass dies ein problem mit der
openjdk-8-jre-headless
installation. Dies ist die installation im Andockfenster Bild für java 8 JRE. Ich installieren Sie einfachopenjdk-8-jre
(ohne Gewindestift) und das problem verschwindet.Wenn Sie einen Blick auf das Fehlerprotokoll, das laden der schriftart benötigen awt X11, das fehlen von
headless
version der JRE.headless
Geschmack von JRE unterstützt keine schriftart laden, weil eine kopflose Umgebung ohne Benutzeroberfläche, so dass keine Notwendigkeit für die schriftart. Die nichtheadless
version, jedoch unterstützt UI, also Schriftarten unterstützt.Auf CentOS headless JRE fehlt die
fontconfig
Abhängigkeit:Außerdem könnte man brauchen, um installieren Sie mindestens eine schriftart (
dejavu
,liberation
etc).Haben wir dann auch noch, dass Fehler bei der Verwendung von tomcat:8.0.38-jre8-alpine. Das Bild fehlt, die Subsysteme fontconfig.
Statt der Umstellung auf ein anderes Bild könnte man auch installieren, die
ttf-dejavu
Paket.Für alpine und openjdk :
Verwenden
RUN apk --update add fontconfig ttf-dejavu
Arbeitete für mich.
Für mich ist dieses Problem behoben: