kledgeb UbuntuやLinuxの最新情報を紹介

Ubuntu Java その4 - Javaアプリのフォントがイタリックになる時は

Javaアプリのフォント

  環境によってはJavaアプリの一部で、以下のように英数字が何故かイタリックで表示される現象が発生します。


  本来表示されるUIは、以下のUIです。



発生条件 

  以下の条件で発生します。

  JRE

    Open JDK 7以降
    Oracle Java 7以降

    いずれも6では発生しない。

  Look & Feel

    GTK
    (UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"))

  その他

    Un series Korean TrueType fonts(fonts-unfonts-core)がインストールされている
    このフォントは韓国語のフォントです。

回避策

  根本的な対策ではありません。

  回避方法 その1

    Un series Korean TrueType fontsをアンインストールします。
    Ubuntuソフトウェアセンターを起動し、「fonts-unfonts-core」で検索します。


    ただしこのパッケージが他のパッケージの依存パッケージになっている場合、そのパッケージもアンインストールされます。
    私の環境では、そのようなパッケージはありませんでした。

    自分で意図的にインストールしたことがなくても、推奨パッケージ等でインストールされている可能性があります。

    ちなみに以下の韓国語フォントでは現象が発生しませんでした。
    状況にもよりますが、代替利用としてありかもしれません。


  回避方法 その2

    JavaのfontconfigファイルをOracle Java 6からコピーします。
    ただしこの方法はJavaのフォントマッチングを変更してしまうため、既存のJavaアプリのフォントが崩れたり、将来不具合が修正された際に不都合が発生する可能性があります。
 

    コピーするファイル

      fontconfig.Ubuntu.bfc
      fontconfig.Ubuntu.properties.src

      いずれも「/usr/lib/jvm/java-6-oracle/jre/lib」にあります。


    コピー先

      コピー先はJREにより異なります。
      以下のパスはすべて64bit版です。

      Open JDK 7:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib
      Oracle Java 7:/usr/lib/jvm/java-7-oracle/jre/lib 
      Oracle Java 8:/usr/lib/jvm/java-8-oracle/jre/lib

状況確認

  OpenJDK 7で確認した内容です。
  ただし原因は把握できていません。

  Ubuntuのデフォルトフォント

    アプリ側からフォントを明示的に指定していないため、Ubuntuのデフォルトのフォントが利用されます。
    デフォルトのフォントは変更していない限り、「Ubuntu」フォントでサイズは11ptになります。
    以下は確認用のコードと実行結果です。     現状の発生如何にかかわらず結果は同じです。

    コード

      String s = (String)LookAndFeel.getDesktopPropertyValue("gnome.Gtk/FontName",0);
      System.out.println(s);

    実行結果

      Ubuntu 11

      フォント名が「Ubuntu」でフォントサイズは11ptです。
      これは正しい結果です。

  ラベルが利用するフォント

    次にラベルが利用しているフォントを調べました。
    現象が発生している状況と未発生の状況では以下のようになりました。
    赤字の箇所が結果が異なる箇所です。

    コード

      System.out.println(myLabel.getFont());
      System.out.println(myLabel.getFont().getSize());
      System.out.println(myLabel.getFont().getPSName());
      System.out.println(myLabel.getFont().getName());
      System.out.println(myLabel.getFont().getFontName());
      System.out.println(myLabel.getFont().getFamily());
      System.out.println(myLabel.getFont().isPlain());
      System.out.println(myLabel.getFont().isBold());
      System.out.println(myLabel.getFont().isItalic());

      myLabelはJLabelのインスタンスです。

    実行結果(現象発生)

      javax.swing.plaf.FontUIResource[family=Ubuntu,name=Ubuntu,style=plain,size=15]
      15
      Ubuntu Italic
      Ubuntu
      Ubuntu Italic
      Ubuntu
      true
      false
      false

      赤字の箇所がなぜかItalicになっています。

    実行結果(現象未発生)

      javax.swing.plaf.FontUIResource[family=Ubuntu,name=Ubuntu,style=plain,size=15]
      15
      Ubuntu
      Ubuntu
      Ubuntu
      Ubuntu
      true
      false
      false


  ちなみにFontManager.findFont2Dで検索したFont2Dは、以下のようになっていました。

  ** TrueType Font: Family=Ubuntu Name=Ubuntu Italic style=2 fileName=/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-RI.ttf

   余談ですがフォントサイズが11ではなく15になっているのは、Java内部は72dpiになっており、Toolkit.getDefaultToolkit().getDesktopProperty("gnome.Xft/DPI");で取得した値からスケーリングしているためです。
  私の環境では96dpiでした。

  fontconfig

    fonts-unfonts-coreをインストールすると、「/etc/fonts/conf.d/90-fonts-unfonts-core.conf」がインストールされます。

    このファイルを削除しPCを再起動後現象の確認を行いましたが、結果は変わらずイタリックになる現象が発生しました。

    Java側のフォントマッチングの問題なのかもしれません。

  参考情報

    Fat fonts in Swing applications

2013/2/17

  環境によっては、ディストリビューションのアップデートとしてインストールされることがあります。


  アップデートでUn series Korean TrueType fontsインストール後に、現象の確認を行うとイタリックになる現象が発生しました。

  Un series Korean TrueType fontsを再度削除すると、現象が起きなくなりました。
  また、Un series Korean TrueType fontsを削除しても他のパッケージの削除等の影響はありませんでした。


Java
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 24.04 その104 - Ubuntu 26.04 LTS へアップグレードするには・アップグレードの注意事項
    Ubuntu 26.04 LTS へアップグレードするには 現在 Ubuntu 24.04 LTS を利用しているユーザーは、Ubuntu 26.04 LTS へアップグレードできます。
  • Ubuntu 26.04 その74 - Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象
    Qt6 で構築されたアプリがクラッシュする現象 Chromium 系ブラウザーにより、Qt6 で構築されたアプリがクラッシュする現象が報告されています。
  • Ubuntu 24.04 その103 - Ubuntu 26.04 LTS へアップグレード可能に・2年分の変化が一気にやってくる
    Ubuntu 26.04 LTS へアップグレード可能に 2026年9月29日、Ubuntu 24.04 LTS から Ubuntu 26.04 LTS へアップグレード可能になりました。
  • Linux その437 - KDE Plasma で実装予定の新機能や改善・オーバービュー効果の改善や Kup の通知機能の改善など
    KDE Plasma で実装予定の新機能や改善 KDE Plasma で実装予定の新機能や改善を紹介します。
  • Ubuntu 26.10 その33 - Ubuntu 26.10 β版がリリースされました・ディスクイメージのダウンロード
    Ubuntu 26.10 β版がリリースされました 2026年10月1日、Ubuntu 26.10 β版 がリリースされました。
  • Ubuntu 26.10 その32 - Snapdragon X2 に対応した Ubuntu 26.10 実験版登場
    Snapdragon X2 に対応した Ubuntu 26.10 実験版登場 2026年9月29日、Snapdragon X2 に対応した Ubuntu 26.10 実験版が登場しました。
  • Ubuntu 24.04 その102 - Ubuntu Desktop 24.04.5.1 がリリースされました・ディスクイメージのダウンロード
    Ubuntu Desktop 24.04.5.1 がリリースされました 2026年9月15日、Ubuntu Desktop 24.04.5.1 がリリースされました。
  • Ubuntu 26.10 その26 - rust-coreutils へ完全移行・cp/mv/rm コマンドもRust版に移行
    rust-coreutils へ完全移行 Ubuntu 26.10 で rust-coreutils(uutils coreutils)へ完全移行します。
  • Ubuntu 26.04 その71 - Linux kernel のアップデート頻度増加へ・毎週アップデートリリース
    Linux kernel のアップデート頻度増加 2026年9月23日、Canonical は Ubuntu 向け Linux kernel のアップデートを毎週リリースする方針をアナウンスしました。
  • Ubuntu 26.10 その28 - Ubuntu Desktop の OOM Killer 設定の見直しとテストの呼びかけ
    OOM Killer 設定の見直し Ubuntu Desktop の OOM Killer 設定の見直しと、テストが呼びかけられています。
記事のピックアップ
オプション