web-dev-qa-db-ja.com

RHELを7.3から7.4にアップグレード:Sun.font.CompositeStrike.getStrikeForSlotのArrayIndexOutOfBoundsException

サーバーを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 JDKWebSphere v9.0)に付属するv1.8.0 SR4 FP6と同じです。 IBM JDKおよびRHEL v7.3サーバー上のRHEL v7.4の同じバージョンでは、プログラムはRH [7.3]で動作し、openjdkと同じようにRH 7.4で失敗します。

何が起こっているのでしょうか?

10
titou10

環境RHEL 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をインストールすると問題が修正されることが確認されています。

yum install dejavu-serif-fonts

6
ALi Maken

「dejavu-serif-fonts」のような他のフォントのみをインストールすると、問題は解決します。または、「local.conf」ファイルを使用して回避策を実行します。 RedHatは7.4でバグとして問題をリストアップしており、実際のソリューションと依存関係を探しています:こちらをご覧ください: https://bugzilla.redhat.com/show_bug.cgi?id=147956

4
kfu

誰かがクリーンなLinuxサーバーインスタンスでアプリケーションの実行に問題がある場合は、コマンドfc-listを実行し、複数のフォントがあり、異なるフォルダーにあるかどうかを確認します。私の場合、パス/ usr/share /に追加のフォントがあります。 X11/fonts/Type1 /、フォルダーのすべてを削除し、問題は解決しました。

0
Wesley Silva