我已经在这部分代码上工作了一天,但却无法弄清楚为什么它总会产生错误。
我有一个控制器和FXML。他们工作得很好。然后我想到我想用一个抽象的updateSelect()函数重用这个特定的控制器。因此,我将控制器更改为抽象。
编译的代码很好。直到我尝试运行这部分代码。
@FXML
private void mnuProjMember_onClick(ActionEvent event) {
mainContent.getChildren().clear();
FXMLLoader loader = new FXMLLoader(getClass().getResource("PaneProjectSearch.fxml"));
PaneProjectSearchController controller = new PaneProjectSearchController(){
@Override
void updateSelect(){
System.out.println("update: !!");
}
};
loader.setController(controller);
controller.setParent(mainContent);
fitToParent(loader);
}
它给出了以下错误消息。嗯...这是没有意义的,因为在删除抽象部分后,代码将再次正常工作,甚至没有触及FXML或其他功能。
解析onAction ='#btnAdd_onClick'时出错,要么事件处理程序不在命名空间中,要么脚本中有错误。 文件:/ d:/NetBeansWork/ProjCostTracking/dist/run1210215635/ProjCostTracking.jar /ProjCostTracking/PaneProjectSearch.fxml:20
欢迎任何指导和建议,谢谢:)
答案 0 :(得分:4)
我猜测你在抽象控制器类中有一个私有的处理程序方法。为了使这个工作,我认为处理程序方法,以及任何@ FXML注释字段,需要由子类直接访问(即公共或受保护,或默认可见性,如果子类与抽象控制器在同一个包中)。