どのように私は、Red HatのOpenJDK 8は、Windows上でAdoptOpenJDKとOracle JDKとして明確にフォントをレンダリングするために強制することができますか?

JKD:

当社のユーザーは、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

オラクル、AdoptOpenJDK、Red Hatの - 各JDKのWindowsのJavaデフォルトのフォント

すべての文字が歪んでいるため、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)

複数のスイングPLAFsとのJDKのWindowsのJavaデフォルトのフォント

Red HatのOpenJDKのビルドがとても違う方法でフォントをレンダリングする理由誰もが知っていますか?それは、Red HatのOpenJDKが必要な場合がありますことを、おそらくいくつかの追加のJDKの構成やセットアップですか?

アップデート - alexkaskoの答えでの回避策(!ありがとう)環境変数FREETYPE_PROPERTIESを設定するには、OpenJDKのバージョン1.8.0_201-2-のredhat-B09のように、正しいフォント問題を行います。

WindowsのJavaのデフォルトのフォントと/ FREETYPE_PROPERTIESなし

alexkasko:

これはによって引き起こされるRed Hatのビルドで回帰である2.8にFreeTypeの更新AdoptOpenJDK jdk8ビルドが古いのFreeType 2.5.3を使用していますこれは、Red Hatのビルドに固定されようとしている。一方、以前の動作は、環境変数を使用して再び有効にすることができます。

FREETYPE_PROPERTIES=truetype:interpreter-version=35

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=214438&siteId=1