Как заставить 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