FXMLLoader中的NPE

时间:2014-10-17 23:28:47

标签: javafx-2 fxmlloader

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

我使用的是64位Java 7u67。

堆栈跟踪显示:

  

显示java.lang.NullPointerException       在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中基本相同,在Preloader的start()方法下调用应用程序的main()方法。

我很难过是什么原因。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

当然,人们可以直接前进并设置默认的类加载器。