Наши пользователи запускают наше приложение 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
![Windows Java Default Font on each JDK - Oracle, AdoptOpenJDK, Red Hat](https://i.stack.imgur.com/8SXkr.png)
Существует некоторая проблема с рендерингом в 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)
![Windows Java Default Font on multiple Swing PLAFs and JDKs](https://i.stack.imgur.com/5lkYr.png)
Кто-нибудь знает, почему в сборке Red Hat OpenJDK шрифты отображаются таким образом, что это так отличается? Возможно, потребуется дополнительная конфигурация JDK или настройка, которая может потребоваться в Red Hat OpenJDK?
Обновление - Обход в ответе Алеккаско (спасибо!) Об установке переменной среды FREETYPE_PROPERTIES исправляет проблему со шрифтом, начиная с версии OpenJDK 1.8.0_201-2-redhat-b09:
![Windows Java Default Font with/without FREETYPE_PROPERTIES](https://i.stack.imgur.com/H6tRB.png)