サーバーをRHEL v7.3
からv7.4
にアップグレードしました。
この単純なプログラムはRHEL v7.3で動作し、v7.4で失敗します
public class TestJava {
public static void main(String[] args) {
Font font = new Font("SansSerif", Font.PLAIN, 12);
FontRenderContext frc = new FontRenderContext(null, false, false);
TextLayout layout = new TextLayout("\ude00", font, frc);
layout.getCaretShapes(0);
System.out.println(layout);
}
}
RHEL 7.4の例外は次のとおりです。
Exception in thread "main" Java.lang.ArrayIndexOutOfBoundsException: 0
at Sun.font.CompositeStrike.getStrikeForSlot(CompositeStrike.Java:75)
at Sun.font.CompositeStrike.getFontMetrics(CompositeStrike.Java:93)
at Sun.font.Font2D.getFontMetrics(Font2D.Java:415)
at Java.awt.Font.defaultLineMetrics(Font.Java:2176)
at Java.awt.Font.getLineMetrics(Font.Java:2283)
at Java.awt.font.TextLayout.fastInit(TextLayout.Java:598)
at Java.awt.font.TextLayout.<init>(TextLayout.Java:393)
RHEL v7.3の結果は次のとおりです。
Sun.font.StandardTextSource@7ba4f24f[start:0, len:1, cstart:0, clen:1, chars:"de00", level:0, flags:0, font:Java.awt.Font[family=SansSerif,name=SansSerif,style=plain,size=12], frc:Java.awt.font.FontRenderContext@c14b833b, cm:Sun.font.CoreMetrics@412ae196]
RHEL v7.4
の更新には、1.8.0.131
から1.8.0.141
へのopenjdk
の更新が含まれますが、これはopenjdk
のバージョンに関連していないようです。 IBM JDK
(WebSphere v9.0
)に付属するv1.8.0 SR4 FP6
と同じです。 IBM JDK
およびRHEL v7.3
サーバー上のRHEL v7.4
の同じバージョンでは、プログラムはRH [7.3]で動作し、openjdk
と同じようにRH 7.4で失敗します。
何が起こっているのでしょうか?
OpenJDKまたはIBM JDKでアップグレードした後、フォントサンセリフを使用することはできません。
Openjdk 1.8.0.141-2のフォントライブラリを使用した新しい例外。解決この問題はJava-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64で修正されています。 RHSA-2017:2998-セキュリティアドバイザリの回避策
いくつかのシナリオでは、dejavu-serif-fontsをインストールすると問題が修正されることが確認されています。
「dejavu-serif-fonts」のような他のフォントのみをインストールすると、問題は解決します。または、「local.conf」ファイルを使用して回避策を実行します。 RedHatは7.4でバグとして問題をリストアップしており、実際のソリューションと依存関係を探しています:こちらをご覧ください: https://bugzilla.redhat.com/show_bug.cgi?id=147956
誰かがクリーンなLinuxサーバーインスタンスでアプリケーションの実行に問題がある場合は、コマンドfc-listを実行し、複数のフォントがあり、異なるフォルダーにあるかどうかを確認します。私の場合、パス/ usr/share /に追加のフォントがあります。 X11/fonts/Type1 /、フォルダーのすべてを削除し、問題は解決しました。