JavaFX连接多个FXML控制器

JavaFX连接多个FXML控制器,java,javafx-8,fxml,fxmlloader,Java,Javafx 8,Fxml,Fxmlloader,我想用FXML创建一个程序。 我有多个FXML文档,每个文档都有控制器。但是我尝试的方法不起作用,因为控制器的对象为null <HBox fx:id="A" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="controllers.AController" alignment="BOTTOM_LEFT"> <Pane fx:id="B" xmlns:f

我想用FXML创建一个程序。 我有多个FXML文档,每个文档都有控制器。但是我尝试的方法不起作用,因为控制器的对象为null

<HBox fx:id="A" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"
fx:controller="controllers.AController" alignment="BOTTOM_LEFT">

<Pane fx:id="B" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"
fx:controller="controllers.BController" HBox.hgrow="ALWAYS" maxWidth="Infinity"/>
然后控制器应该从B接收初始化的控制器

AContoller ac = Aloader.getController();
BCOntroller bc = Bloader.getController();
ac.setBController(bc);
AController中有一个方法看起来像,但“getController()”返回与fxml关联的控制器的完整新实例:

public class AController{
private BContoller bc;

  public void setBController(BController b){
    bc = b;
  }
};

这意味着AController应该从B接收初始化的控制器。代码片段看起来像是在同一范围内创建加载程序。但是如果是这种情况,代码段将无法编译,因为您正在声明两个名为
toolbar
的变量。这也应该起作用,所以问题是:如果“控制器的对象为空”,如何检查?还有那两个fxml文件,如果是这样的话,你可以用
和一个空行分隔代码段。哦,对不起,我试着做一个简单的示例,复制粘贴了我代码的一些元素并对它们进行了更改。你怎么知道对象为空?通常,在控制器中的“public void initialize()”方法中会有一些初始化逻辑,FXMLLoader会自动调用该方法。但是,这是在加载fxml文件之后以及从FXMLLoader中获取对控制器文件的引用之前直接完成的。这意味着在设置另一个控制器之前执行“初始化”。在“initialize”运行时,另一个控制器仍然为空。这意味着AController应该从B接收初始化的控制器。代码片段看起来像是在同一范围内创建加载程序。但是如果是这种情况,代码段将无法编译,因为您正在声明两个名为
toolbar
的变量。这也应该起作用,所以问题是:如果“控制器的对象为空”,如何检查?还有那两个fxml文件,如果是这样的话,你可以用
和一个空行分隔代码段。哦,对不起,我试着做一个简单的示例,复制粘贴了我代码的一些元素并对它们进行了更改。你怎么知道对象为空?通常,在控制器中的“public void initialize()”方法中会有一些初始化逻辑,FXMLLoader会自动调用该方法。但是,这是在加载fxml文件之后以及从FXMLLoader中获取对控制器文件的引用之前直接完成的。这意味着在设置另一个控制器之前执行“初始化”。在运行“初始化”时,另一个控制器仍然为空。
public class AController{
private BContoller bc;

  public void setBController(BController b){
    bc = b;
  }
};