Как заставить Red Hat OpenJDK 8 отображать шрифты так же ясно, как AdoptOpenJDK и Oracle JDK в Windows?

Наши пользователи запускают наше приложение Java GUI на своих рабочих столах Windows, и мы планируем перейти с Oracle Java 8 на OpenJDK 8. Но мы обнаружили, что различные сборки OpenJDK несовместимы по качеству рендеринга шрифтов с Oracle и AdoptOpenJDK. быть эквивалентным, но Red Hat сильно не хватает.

На следующем снимке экрана показана простая программа Java AWT/Swing для Windows на трех разных JDK:

  • Oracle 1.8.0_201-b26
  • AdoptOpenJDK 1.8.0_202-b08
  • Red Hat 1.8.0_201-2-redhat-b09

Есть некоторая проблема с рендерингом в Red Hat JDK, потому что каждый персонаж искажен.

Программа просто отображает Swing JLabel с указанным в командной строке шрифтом Dialog/bold/12 (который каждый JDK сопоставляет со шрифтом Arial Windows OS):

    $ cat fontname.groovy
    import javax.swing.*
    import java.awt.Font
    import sun.font.*

    styles=[bold:Font.BOLD,italic:Font.ITALIC,plain:Font.PLAIN]
    SwingUtilities.invokeLater({
     l = new JLabel("${args}: ${System.getProperty('java.runtime.name')} ${System.getProperty('java.runtime.version')}")
     l.setFont(new Font(args[0],styles[args[1]],Integer.valueOf(args[2])))
     f = new JFrame()
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
     f.getContentPane().setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10))
     f.getContentPane().add(l)
     f.pack()
     f.setVisible(true)
     logicalFont = l.getGraphics().getFont()
     print(logicalFont)
     physicalFont = FontManagerFactory.getInstance().findFont2D( logicalFont.getName(), 0, FontManager.NO_FALLBACK )
     print(physicalFont)
    })

На дополнительном снимке экрана ниже показан тот же шрифт на 3 PLAF Swing, доступных в этой системе Windows, и показано, что внешний вид Red Hat OpenJDK одинаков для каждого PLAF (задается с помощью параметра системного свойства "-Dswing.defaultlaf="):

  • Внешний вид по умолчанию (javax.swing.plaf.metal.MetalLookAndFeel)
  • Windows Look and Feel (com.sun.java.swing.plaf.windows.WindowsLookAndFeel)
  • Nimbus Look and Feel (javax.swing.plaf.nimbus.NimbusLookAndFeel)

Кто-нибудь знает, почему в сборке Red Hat OpenJDK шрифты отображаются так сильно? Возможно, это какая-то дополнительная конфигурация JDK или настройка, которая может потребоваться Red Hat OpenJDK?

Обновление - обходной путь в ответе Алеккаско (спасибо!) Об установке переменной среды FREETYPE_PROPERTIES исправляет проблему со шрифтом, начиная с OpenJDK версии 1.8.0_201-2-redhat-b09:

1 ответ

Решение

Это регрессия в сборке Red Hat, вызванная обновлением FreeType до 2.8. В сборке AdoptOpenJDK jdk8 используется более старая версия FreeType 2.5.3. Это будет исправлено в сборках Red Hat, в то время как старое поведение может быть повторно включено с помощью переменной среды:

FREETYPE_PROPERTIES=truetype:interpreter-version=35
Другие вопросы по тегам