我们的用户在Windows桌面上运行我们的Java GUI应用程序,并且我们计划从Oracle Java 8切换到OpenJDK8。但是我们发现,不同的OpenJDK构建与字体渲染质量不一致, Oracle和AdoptOpenJDK是等效的,但Red Hat严重缺乏。
以下屏幕快照显示了Windows上三个不同JDK上的简单Java AWT / Swing程序:
Red Hat JDK中的呈现存在一些问题,因为每个字符都失真。
程序仅显示带有命令行指定Dialog / bold / 12字体的Swing JLabel(每个JDK都将其映射到Windows OS Arial字体):
$ 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)
})
下面的附加屏幕快照在此Windows系统上可用的3个Swing PLAF上显示相同的字体,并显示在Red Hat OpenJDK下的外观对于每个PLAF都是一致的(通过系统属性选项“ -Dswing.defaultlaf =”设置):< / p>
有人知道为什么Red Hat OpenJDK构建会以如此不同的方式呈现字体吗?红帽OpenJDK可能需要其他JDK配置或设置吗?
更新-自OpenJDK版本1.8.0_201-2-redhat-b09开始,alexkasko的答案(谢谢!)中设置环境变量FREETYPE_PROPERTIES的变通办法确实纠正了字体问题:
答案 0 :(得分:0)
这是FreeType update to 2.8在Red Hat版本中引起的回归。采用OpenJDK jdk8版本uses older FreeType 2.5.3。这将在Red Hat版本中修复,同时可以使用环境变量重新启用旧行为:
FREETYPE_PROPERTIES=truetype:interpreter-version=35