当前位置: 首页 > 知识库问答 >
问题:

JavaFX NullPointerException on Startup

杜楚
2023-03-14

我正在尝试在Linux(我有正确版本的GTK)上使用Oracle JVM(1.7u13)运行一个非常简单的JavaFX程序,该程序从Eclipse或命令行运行。当它开始时,它抛出了一个例外,抱怨字体。字体。getDefault()也会导致相同的NPE。我可以使用字体列出可用的字体。getFontNames(),我可以看到17个,包括我认为是默认的“系统规则”。

任何想法非常感谢!

堆栈跟踪....

    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.get默认()的路由原因是导致几个非常简单的用户界面节点不显示的原因。


    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个答案

魏安宁
2023-03-14

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

尝试在Slackware linux上加载默认字体时出现RT-28405 NPE

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

在此处复制(仅复制并粘贴)问题中的一些评论,以便临时用户无需注册错误跟踪器即可访问它们:

用户提交的解决方案

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

开发者提供的背景资料

自从添加TTF字体到 /usr/share/fonts工作,那么我们似乎成功地使用 /usr/libfontconfig来定位已安装的字体,但显然没有我们喜欢的字体。即FX不支持类型1字体(策略决定),只支持TrueType和OpenType/CFF字体。您是使用OpenJDK还是Oracle JDK运行?我敢打赌,与sackware捆绑的OpenJDK没有自己的字体,而OracleJDK有一些自己的TrueType字体,因此不会遇到这个问题。这里的底线似乎是您应该安装一组不错的TrueType字体。我认为我们唯一能做的就是在这种情况发生时改善对角线。

用户提供的环境信息

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

 类似资料:

相关问答

相关文章

相关阅读