我的应用程序是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()方法。
我很难过是什么原因。有什么想法吗?
答案 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"));
}
当然,人们可以直接前进并设置默认的类加载器。