我想initialize在创建时自动调用控制器的方法之前在控制器中设置一些非 UI 字段。据我了解,这样做的方式是定制的提供ControllerFactory,因为initialize()被调用后 ControllerFactory返回创建的对象。我想根据这个答案使用以下代码:
FXMLLoader loader = new FXMLLoader(mainFXML); // some .fxml file to load
loader.setControllerFactory(param -> {
Object controller = null;
try {
controller = ReflectUtil.newInstance(param); // this is default behaviour
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
if (controller instanceof Swappable) {
((Swappable) controller).setSwapper(swapper); // this is what I want to add
}
return controller;
});
但是,ReflectUtil该类(在 default setControllerFactory method 中使用)是com.sun.reflect.misc包的一部分,我无法使用它,因为编译失败并带有error: package sun.reflect.misc does not exist.
据我了解,我不能使用 sun 包,因为这不是公共 API。所以问题是:我该怎么办?我找不到任何其他示例,只有带有 ReflectUtil 的示例,而且,我希望我ControllerFactory能够使用 @FXML 注释来遵守 JavaFX 的默认工作流等等,这是否可以与其他一些 DI 框架(如 Jodd Petite)一起使用,例如?还有其他方法可以设置字段吗?(除了同步它并等待initialize()直到从其他线程调用 setter 方法)。 github 上的完整代码用于上下文。
饮歌长啸
相关分类