2015-06-03 22 views
8

Tôi không thể tải một phông chữ từ một S3 InputStream trong JRE 8. Tôi không có vấn đề nếu một hệ thống được cài đặt với JRE 7, JDK 7, hoặc thậm chí JDK 8.Không thể tải phông chữ trong JRE 8

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

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

các lỗi mà tôi nhận được là

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) 

tôi đã cố gắng để tải inputstream vào một tập tin tạm thời, nhưng nó không giúp đỡ. Tôi cũng đã cố gắng để tải một phông chữ trực tiếp từ một tập tin địa phương, nhưng tôi đã nhận một lỗi khác nhau với nhận siêu dữ liệu phông chữ. Đây là nhật ký lỗi.

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) 

Vì vậy, đây không phải là một vấn đề với inputstream, mà là với việc nạp font riêng của mình trong JRE 8.

Điều này có vẻ giống như một lỗi trong JRE 8 Font.

Tôi đang tải phông chữ để sử dụng để vẽ một chuỗi trong ảnh. Mã của tôi được chạy trong vùng chứa Docker bằng cách sử dụng hình ảnh java: 7-jre (ok), java: 7-jdk (ok), java: 8-jre (không thành công), java: 8-jdk (ok).

+1

và URL của phông chữ là gì? Bạn có thể chạy nó thông qua TTX, và xem liệu có ném bất kỳ lỗi nào hay không, cũng như thử tải nó trong Font Forge, điều này thậm chí còn khó xử hơn khi nói với bạn rằng phông chữ bạn đang nạp có giá trị xấu ở đâu đó. –

Trả lời

4

Nó chỉ ra rằng đây là một vấn đề với việc cài đặt openjdk-8-jre-headless. Đây là cài đặt trong hình ảnh Docker cho java 8 JRE. Tôi chỉ cần cài đặt openjdk-8-jre (không có đầu) và vấn đề sẽ biến mất.

Nếu bạn nhìn vào nhật ký lỗi, tải phông chữ yêu cầu awt X11, bị thiếu trong phiên bản headless của JRE.

+0

Để làm rõ thêm câu trả lời, hương vị 'không đầu' của JRE không hỗ trợ tải phông chữ vì môi trường không có đầu là một không có giao diện người dùng, do đó không cần phông chữ. Tuy nhiên, phiên bản không đầu không hỗ trợ giao diện người dùng, do đó hỗ trợ phông chữ. – Khanetor

0

Đối với tôi vấn đề này được giải quyết:

apt-get install -y libfontconfig1 
1

On CentOS không đầu JRE thiếu fontconfig phụ thuộc:

yum install fontconfig 

Ngoài ra người ta có thể cần phải cài đặt ít nhất một phông chữ (dejavu, liberation, vv).

3

Tôi đã gặp lỗi tương tự trong openjdk: 8-jre-alpine. Chuyển sang openjdk: 8-jre cũng đã giúp. (dòng apt-get có vẻ không cần thiết)

--- FROM openjdk:8-jre-alpine 
+++ FROM openjdk:8-jre 
+++ RUN apt-get install -y libfontconfig 
Các vấn đề liên quan