it-swarm.com.de

Aktualisieren Sie RHEL von 7.3 auf 7.4: ArrayIndexOutOfBoundsException in Sun.font.CompositeStrike.getStrikeForSlot

Wir haben gerade einen Server von RHEL v7.3 Auf v7.4 Aktualisiert.

Dieses einfache Programm funktioniert in RHEL v7.3 und schlägt in v7.4 fehl

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);
  }
}

Die Ausnahme in RHEL 7.4 ist:

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)

Das Ergebnis auf RHEL v7.3 ist:

[email protected][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:[email protected], cm:[email protected]]

Das Update von RHEL v7.4 Enthält ein Update von openjdk von 1.8.0.131 Auf 1.8.0.141, Das jedoch nicht mit der Version von openjdk, da das Problem mit IBM JDK dasselbe ist wie mit WebSphere v9.0 (v1.8.0 SR4 FP6). Mit der gleichen Version von IBM JDK Auf einem RHEL v7.3 - und RHEL v7.4 - Server funktioniert das Programm in RH 7.3 und schlägt in RH 7.4 genauso fehl wie mit openjdk

Irgendeine Idee, was los ist?

10
titou10

Wir haben es endlich gefunden!
RHEL v7.4 (aktualisiert von v7.3 oder neu installiert) wird mit Paket stix-fonts.
Bei der Installation dieses Pakets wurde die Standardschrift von Utopia in STIX geändert. Daher werden Java jetzt Standardschriften STIX, einschließlich dersans-serifSchriftfamilie
Aus irgendeinem Grund scheinen die Schriften STIX nicht gut mit Java (openjdk + IBM JDK) und Ausnahmen und schlecht berechnete Artefakte verursachen, wenn Java.awt, was bei JasperReports der Fall ist
Wir haben die Erstellung eines Dateinamens beendet /etc/fonts/local.conf mit diesem Befehl, um Utopia als von Java verwendete Standardschrift zurückzusetzen.

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <alias>
    <family>serif</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>dialog</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
  <alias>
    <family>dialoginput</family>
    <prefer><family>Utopia</family></prefer>
  </alias>
</fontconfig>

[EDITED 2018-10-22]
Es scheint, dass der Fehler in JDK 1.8.192 behoben ist: https://bugs.Java.com/view_bug.do?bug_id=JDK-81880

[EDITED 2019-06-28]
Das in IBM JDK v8.05.37 enthaltene Problem wurde behoben http://www-01.ibm.com/support/docview.wss?uid=swg1IJ16655

19
titou10

Umgebung RHEL 7.4

Nach dem Upgrade mit OpenJDK oder IBM JDK können wir keine serifenlosen Schriftarten mehr verwenden.

Neue Ausnahme bei Verwendung von Schriftartenbibliotheken in openjdk 1.8.0.141-2. Lösung Das Problem wurde in Java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64 behoben. RHSA-2017: 2998 - Problemumgehung für Sicherheitsanweisungen

Es wird beobachtet, dass in einigen Szenarien die Installation von dejavu-serif-fonts das Problem behebt.

yum install dejavu-serif-fonts

6
ALi Maken

wenn Sie nur eine andere Schriftart wie "dejavu-serif-fonts" installieren, ist das Problem behoben. Oder Sie umgehen das Problem mit der Datei "local.conf". RedHat hat das Problem in 7.4 als Fehler aufgeführt und sucht nach einer echten Lösung und nach Abhängigkeiten: Schauen Sie hier nach: https://bugzilla.redhat.com/show_bug.cgi?id=147956

4
kfu

Wenn jemand Probleme hat, eine Anwendung auf einer sauberen Linux-Serverinstanz auszuführen, führen Sie den Befehl fc-list aus und überprüfen Sie, ob mehrere Schriftarten aus verschiedenen Ordnern vorhanden sind. In meinem Fall hatte ich einige zusätzliche Schriftarten im Pfad/usr/share/X11/fonts/Type1 /, ich habe alles aus dem Ordner entfernt und das Problem wurde behoben.

0
Wesley Silva