3

Eclipseまたはコマンドラインから実行されているLinux(正しいバージョンのGTKを持っています)でOracle JVM(1.7u13)を使用して、非常に単純なJavaFXプログラムを実行しようとしています。開始すると、フォントに関するうめき声の例外がスローされます。Font.getDefault() も同じ NPE を引き起こす可能性があります。Font.getFontNames() を使用して使用可能なフォントを一覧表示できます。デフォルトだと思っていた 'System Regular' を含む 17 を確認できます。

どんなアイデアでも大歓迎です!

スタックトレース....

    スレッド「メイン」での例外 java.lang.RuntimeException: アプリケーションの開始メソッドでの例外
        com.sun.javafx.application.LauncherImpl.launchApplication1 (LauncherImpl.java:403) で
        com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47) で
        com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115) で
        java.lang.Thread.run(Thread.java:722) で
    原因: java.lang.NullPointerException
        com.sun.t2k.LogicalFont.(LogicalFont.java:172) で
        com.sun.t2k.LogicalFont.getLogicalFont(LogicalFont.java:104) で
        com.sun.t2k.LogicalFont.getLogicalFont(LogicalFont.java:144) で
        com.sun.t2k.T2KFontFactory.createFont(T2KFontFactory.java:356) で
        com.sun.prism.j2d.J2DFontFactory.createFont(J2DFontFactory.java:38) で
        com.sun.javafx.font.PrismFontLoader.loadFont(PrismFontLoader.java:399)
        at javafx.scene.text.Font.(Font.java:282)
        javafx.scene.text.Font.getDefault(Font.java:85)で
        com.me.FXProblem.start(FXProblem.java:23) で
        com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319) で
        com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215) で
        com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179) で
        com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176) で
        java.security.AccessController.doPrivileged(ネイティブメソッド)で
        com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176) で
        com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76) で
        com.sun.glass.ui.gtk.GtkApplication._runLoop(ネイティブメソッド)
        com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:82) で
        ... あともう1つ

アップデート

エラーを取得するサンプル コード。Font.getDefault() のルート原因が、いくつかの非常に単純な UI ノードが表示されない原因であると想定しています。


    package com.me;

    import javafx.application.Application;
    import javafx.scene.text.Font;
    import javafx.stage.Stage;

    /**
     * Problem class to show the stack trace from Font.getDefault()
     */
    public class FXProblem extends Application
    {
        /**
         * {@inheritDoc}
         */
        @Override
        public void start(final Stage stage) throws Exception
        {
            Font.getDefault();
        }

        /**
         * Main.
         */
        public static void main(final String[] args)
        {
            launch();
        }
    }
    
4

1 に答える 1

2

JavaFX 2.2 の既知の (現在未解決の) 問題のようです:

RT-28405 Slackware Linux でデフォルトのフォントをロードしようとすると NPE が発生する

上記のバグ追跡リンクを使用するにはログインが必要ですが、誰でもサインアップできます。


問題からのコメントの一部をここに再現 (コピーして貼り付けるだけ) するので、一般ユーザーはアクセスするためだけにバグトラッカーにサインアップする必要がなくなります。

ユーザーが提出した回避策

TTF ディレクトリを /usr/share/fonts に追加し、少なくとも .ttf ファイルをそのディレクトリに追加するだけで、問題を回避できました。(/usr/share/fonts/TTF/somefont.ttf) 以前は、/usr/share/fonts 内の他のディレクトリは Type1 だけでした。(/usr/share/fonts/Type1)

開発者提供の背景情報

TTF フォントを /usr/share/fonts に追加するとうまくいくので、/usr/libfontconfig を使用してインストールされているフォントを見つけることに成功しているように見えますが、どうやら私たちの好みに合うものはなかったようです。つまり、FX は Type 1 フォントをサポートせず (ポリシーの決定)、TrueType および OpenType/CFF フォントのみをサポートします。OpenJDK または Oracle JDK で実行していますか? slackware OpenJDK にバンドルされている OpenJDK には独自のフォントがありませんが、OracleJDK には独自の TrueType フォントがいくつかあるため、この問題は発生しません。ここでの結論は、適切な TrueType フォントのセットをインストールする必要があるようです。私たちの側でできる唯一のことは、これが発生したときに診断を改善することだと思います.

ユーザー提供の環境情報

OracleのJDKを使っていたので、これを打ってビックリ。( 7u10 ) しかし、私はあなたの評価に同意します。この問題を解決するために新しいフォントをインストールすることは大したことではなく、それが問題であることを理解するのが難しかっただけです。(他のフォントがインストールされていたため) この問題を検出し、より良いフィードバックを提供していただければ、それは私の観点からは受け入れられます。ありがとう!

于 2013-02-20T20:17:35.773 に答える