繁体   English   中英

如何强制Red Hat OpenJDK 8渲染字体与Windows上的AdoptOpenJDK和Oracle JDK一样清晰?

[英]How can I force Red Hat OpenJDK 8 to render fonts as clearly as AdoptOpenJDK and Oracle JDK on Windows?

我们的用户在Windows桌面上运行Java GUI应用程序,我们正计划从Oracle Java 8切换到OpenJDK8。但是,我们发现使用Oracle和AdoptOpenJDK时,不同的OpenJDK构建在字体渲染质量方面不一致。相当,但Red Hat严重缺乏。

以下屏幕快照显示了Windows上三个不同JDK上的简单Java AWT / Swing程序:

  • 甲骨文1.8.0_201-b26
  • 采用OpenJDK 1.8.0_202-b08
  • 红帽1.8.0_201-2-redhat-b09

每个JDK上的Windows Java默认字体-Oracle,AdoptOpenJDK,Red Hat

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 =”设置):

  • 默认外观(javax.swing.plaf.metal.MetalLookAndFeel)
  • Windows外观(com.sun.java.swing.plaf.windows.WindowsLookAndFeel)
  • Nimbus外观(javax.swing.plaf.nimbus.NimbusLookAndFeel)

多个Swing PLAF和JDK上的Windows Java默认字体

有谁知道为什么Red Hat OpenJDK构建会以如此不同的方式呈现字体? Red Hat OpenJDK可能需要其他JDK配置或设置吗?

更新 -从OpenJDK版本1.8.0_201-2-redhat-b09开始,alexkasko的答案(设置环境变量FREETYPE_PROPERTIES)中的解决方法确实纠正了字体问题:

Windows Java默认字体,带有/不带有FREETYPE_PROPERTIES

这是由FreeType更新到2.8导致的Red Hat构建中的回归。 AdoptOpenJDK jdk8构建使用较旧的FreeType 2.5.3 这将在Red Hat版本中修复,同时可以使用环境变量重新启用旧行为:

FREETYPE_PROPERTIES=truetype:interpreter-version=35

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM