启动时出现JavaFX NullPointerException

我试图运行一个非常简单的JavaFX程序,使用从Eclipse或命令行运行的Linux上的Oracle JVM(1.7u13)(我拥有正确版本的GTK)。 当它启动时,会引发一个呻吟,关于字体的exception。 Font.getDefault()也可以导致相同的NPE。 我可以使用Font.getFontNames()列出可用的字体,我可以看到包括“System Regular”在内的我认为是默认的字体。

任何想法非常感谢!

堆栈跟踪….

    线程“main”中的exceptionjava.lang.RuntimeException:Application start方法中的exception
        在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)
        在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(); } } 

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

RT-28405 NPE试图加载Slackware linux上的默认字体

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


在这里复制(复制和过去)一些问题的评论,所以偶然的用户不需要注册错误跟踪器就可以访问它们:

用户提交的解决方法

我已经设法通过简单地添加一个TTF目录到/ usr / share / fonts并至少在.ttf文件添加到该目录解决问题。 (/usr/share/fonts/TTF/somefont.ttf)以前,/ usr / share / fonts中唯一的其他目录是Type1。 (在/ usr /共享/字体/类型1)

开发者提供的背景信息

由于将TTF字体添加到/ usr / share / fonts中,因此我们似乎成功使用/ usr / libfontconfig来查找已安装的字体,但显然没有我们的意愿。 即FX不支持Type 1字体(一个策略决定),只支持TrueType和OpenType / CFF字体。 你是用OpenJDK还是Oracle JDK运行? 我敢打赌OpenJDK和Slackware捆绑在一起OpenJDK没有自己的字体,而OracleJDK有一些自己的TrueType字体,所以不会遇到这个问题。 这里的底线似乎是你应该安装一套体面的TrueType字体。 我认为我们唯一能做的就是在这种情况下改善诊断。

用户提供的环境信息

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