当社のユーザーは、Windowsデスクトップ上で、当社のJava GUIアプリケーションを実行し、そして我々はOpenJDKの8にオラクルのJava 8からスイッチを計画している。しかし、我々は、フォントレンダリングの品質に矛盾している別のOpenJDKのは、OracleとAdoptOpenJDKと、ビルドされることを発見しました同等であるが、Red Hatがひどく欠けています。
次のスクリーンショットショー3つの異なるJDKのWindows上で簡単なJava AWT / Swingのプログラム:
- オラクル1.8.0_201-B26
- AdoptOpenJDK 1.8.0_202-B08
- Red Hatの1.8.0_201-2-でredhat-B09
すべての文字が歪んでいるため、Red HatのJDKでのレンダリングに問題があります。
プログラムは、ちょうど(各JDKは、Windows OS Arialフォントにマップ)、コマンドライン指定のダイアログ/太字/ 12フォントとスイングのJLabelを表示しています:
$ 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)
})
ショーの下に追加のスクリーンショットRed HatのOpenJDKの下の外観は、各PLAF(システムプロパティオプション「-Dswing.defaultlaf =」経由セット)のために一貫していることを、このWindowsシステムやショーで利用できる3スイングPLAFsで同じフォント:
- デフォルトのLook&Feel(javax.swing.plaf.metal.MetalLookAndFeel)
- Windowsのルック・アンド・フィール(com.sun.java.swing.plaf.windows.WindowsLookAndFeel)
- ニンバスルック・アンド・フィール(javax.swing.plaf.nimbus.NimbusLookAndFeel)
Red HatのOpenJDKのビルドがとても違う方法でフォントをレンダリングする理由誰もが知っていますか?それは、Red HatのOpenJDKが必要な場合がありますことを、おそらくいくつかの追加のJDKの構成やセットアップですか?
アップデート - alexkaskoの答えでの回避策(!ありがとう)環境変数FREETYPE_PROPERTIESを設定するには、OpenJDKのバージョン1.8.0_201-2-のredhat-B09のように、正しいフォント問題を行います。
これはによって引き起こされるRed Hatのビルドで回帰である2.8にFreeTypeの更新。AdoptOpenJDK jdk8ビルドが古いのFreeType 2.5.3を使用しています。これは、Red Hatのビルドに固定されようとしている。一方、以前の動作は、環境変数を使用して再び有効にすることができます。
FREETYPE_PROPERTIES=truetype:interpreter-version=35