2015-06-03 11 views
8

ich nicht eine Schriftart aus einem S3 INPUTSTREAM- in JRE 8. Ich habe kein Problem laden kann, wenn ein System mit JRE 7, JDK 7 oder sogar JDK 8 installiert istKann nicht Schriftart in JRE laden 8

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

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

Der Fehler, was 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) 

ich versuchte, den Eingabestrom in eine temporäre Datei zu laden, aber es hilft nicht. Ich habe auch versucht, eine Schriftart direkt aus einer lokalen Datei zu laden, aber ich habe einen anderen Fehler beim Abrufen von Schriftart-Metadaten bekommen. 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 ist dies kein Problem mit INPUTSTREAM- sondern mit dem Laden der Schrift selbst in JRE 8.

Dies scheint ein Fehler in JRE 8 Font.

Ich lade eine Schriftart, um eine Zeichenkette in einem Bild zu zeichnen. Mein Code wird in einem Docker Container mit Bildern Java: 7-jre (ok), Java: 7-jdk (ok), Java: 8-jre (nicht bestanden), Java: 8-jdk (ok).

+1

und was ist die URL für die Schriftart? Vielleicht möchten Sie es über TTX ausführen, um zu sehen, ob das Fehler verursacht, oder versuchen, es in Font Forge zu laden, was noch schwieriger ist, wenn Sie sagen, dass die Schriftart, die Sie laden, irgendwo schlechte Werte hat. –

Antwort

4

Es stellt sich heraus, dass dies ein Problem mit der openjdk-8-jre-headless Installation ist. Dies ist die Installation im Docker-Image für Java 8 JRE. Ich installiere einfach openjdk-8-jre (ohne Kopflos) und das Problem verschwindet.

Wenn Sie sich das Fehlerprotokoll ansehen, erfordert das Laden der Schriftart awt X11, das in der headless Version von JRE fehlt.

+0

Um die Antwort weiter zu verdeutlichen, unterstützt die "kopflose" Variante von JRE das Laden von Schriften nicht, da eine Umgebung ohne Benutzeroberfläche ohne Benutzeroberfläche ist, also keine Schrift benötigt. Die nicht "kopflose" Version unterstützt jedoch UI und unterstützt somit die Schriftart. – Khanetor

0

Für mich entschlossen Ausgabe:

apt-get install -y libfontconfig1 
1

auf CentOS kopflos JRE fehlt die fontconfig Abhängigkeit:

yum install fontconfig 

auch mindestens eine Schriftart (dejavu, könnte man brauchen liberation zu installieren, etc).

3

Ich traf mit dem gleichen Fehler in openjdk: 8-jre-alpine. Der Wechsel zu openjdk: 8-jre hat ebenfalls geholfen. (apt-get line scheint nicht notwendig)

--- FROM openjdk:8-jre-alpine 
+++ FROM openjdk:8-jre 
+++ RUN apt-get install -y libfontconfig 
Verwandte Themen