2

我有一个混合了 Swing(旧版)和 JavaFX 组件的应用程序。在我尝试将 Preloader 插入到组合中之前它工作正常,现在我所有使用 fxml 文件和 FXMLLoader 的 JavaFX 组件都不起作用,因为只要new FXMLLoader()(带或不带参数)就会抛出 NPE,或者FXMLLoader.load(),被调用。

我正在使用 64 位 Java 7u67。

堆栈跟踪显示:

java.lang.NullPointerException at javafx.fxml.JavaFXBuilderFactory.(JavaFXBuilderFactory.java:85) 在 javafx.fxml.JavaFXBuilderFactory.(JavaFXBuilderFactory.java:53) 在 javafx.fxml.FXMLLoader.load(FXMLLoader.java:2782) 在 javafx .fxml.FXMLLoader.load(FXMLLoader.java:2771)

在插入 PreLoader 之前,初始化类会完成其工作,然后调用实际应用程序的 main() 方法。在 Preloader 中基本上是一样的,应用程序的 main() 方法在 Preloader 的 start() 方法下被调用。

我很困惑是什么原因。有任何想法吗?

4

1 回答 1

2

我不得不查看源代码,但我在网上找到的与报告的 # 行不匹配。

无论如何,按照我所看到的,默认类加载器似乎在我描述的转换中变为空。我为解决这个问题所做的是将类加载器设置为一个工作实例,例如

        try {
           fxmlLoader = new FXMLLoader(getClass().getResource("Sample.fxml"));
        } catch(Exception e) {
           FXMLLoader.setDefaultClassLoader(SampleController.class.getClassLoader());
           fxmlLoader = new FXMLLoader(getClass().getResource("Sample.fxml"));
        }

当然,可以直接设置默认的类加载器。

于 2014-10-18T04:16:03.427 回答