启动时出现JavaFX NullPointerException

时间:2013-02-20 10:27:25

标签: linux javafx

我尝试使用从Eclipse或命令行运行的Linux上的Oracle JVM(1.7u13)(我有正确版本的GTK)来运行一个非常简单的JavaFX程序。当它开始时它抛出了关于字体的异常呻吟。 Font.getDefault()也可以导致相同的NPE。我可以使用Font.getFontNames()列出可用的字体,我可以看到包含' System Regular'我以为是默认的。

任何想法都非常感激!

堆栈跟踪....

    Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403)
        at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
        at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
        at java.lang.Thread.run(Thread.java:722)
    Caused by: java.lang.NullPointerException
        at com.sun.t2k.LogicalFont.(LogicalFont.java:172)
        at com.sun.t2k.LogicalFont.getLogicalFont(LogicalFont.java:104)
        at com.sun.t2k.LogicalFont.getLogicalFont(LogicalFont.java:144)
        at com.sun.t2k.T2KFontFactory.createFont(T2KFontFactory.java:356)
        at com.sun.prism.j2d.J2DFontFactory.createFont(J2DFontFactory.java:38)
        at com.sun.javafx.font.PrismFontLoader.loadFont(PrismFontLoader.java:399)
        at javafx.scene.text.Font.(Font.java:282)
        at javafx.scene.text.Font.getDefault(Font.java:85)
        at com.me.FXProblem.start(FXProblem.java:23)
        at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
        at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
        at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
        at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
        at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
        at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:82)
        ... 1 more

更新

获取错误的示例代码。我假设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();
        }
    }
    

1 个答案:

答案 0 :(得分:2)

看起来像JavaFX 2.2的已知(当前开放)问题:

RT-28405 NPE when trying to load default font on Slackware linux

使用上述错误跟踪链接需要登录,但任何人都可以注册。


重现(仅复制和过去)此处问题的一些评论,以便临时用户无需注册错误跟踪器即可访问它们:

用户提交的解决方法

  

我设法解决了这个问题,只需在/ usr / share / fonts中添加一个TTF目录,并在该目录中添加至少.ttf文件。 (/usr/share/fonts/TTF/somefont.ttf)以前,/ usr / share / fonts中唯一的其他目录是Type1。 (/ usr / share / fonts / Type1)

开发人员提供的背景信息

  

由于在/ usr / share / fonts中添加了TTF字体,所以看起来我们已经成功了   使用/ usr / libfontconfig来定位已安装的字体,但显然没有我们喜欢的。即FX不支持Type 1字体(策略决策),仅支持TrueType和OpenType / CFF字体。您是使用OpenJDK还是Oracle JDK运行?我敢打赌,与slackware捆绑的OpenJDK OpenJDK没有自己的字体,而OracleJDK有一些自己的TrueType字体,所以不会遇到这个问题。这里的底线似乎是你应该安装一套不错的TrueType字体。   我认为我们唯一可以做的就是在发生这种情况时改善对角线。

用户提供的环境信息

  

我使用的是Oracle的JDK,所以我很惊讶。 (7u10)但我同意你的评估,安装新字体来解决这个问题没什么大不了的,只是很难弄清楚那就是问题所在。 (因为我们确实安装了其他字体)如果您能够检测到这个问题并提供更好的反馈,那么从我的角度来看这是可以接受的。谢谢!