小编典典

加载fxml时为什么会出现?

java

我已经调整了控制器的构造函数和fxml,以便将控制器的fxml的所有设置都放在fxml中,除了FXML的构造和fxml的加载。这是我的控制器:

public class MainOverviewTab extends Tab {

@FXML private AnchorPane content;

public MainOverviewTab() {
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("main_overview_tab.fxml"));
    // fxmlLoader.setRoot(content);
    // fxmlLoader.setController(this);

    try {
        fxmlLoader.load();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

和我的fxml文件:

<AnchorPane id="AnchorPane" 
    fx:id="content" 
    fx:controller="dominion.application.controller.MainOverviewTab"
    ...other settings >

        <children>
            ....
        </children>
</AnchorPane>

当调用fxmlLoader.load()并返回FXMLLoader时会发生 fxmlLoader = new
FXMLLoader(…),然后再次调用fxmlLoader.load()…为什么会发生这种情况,以及如何保持控制器构造函数是否相同,而加载的fxml是否相同?还是不可能?


阅读 310

收藏
2020-11-26

共1个答案

小编典典

您不应在in构造函数中调用FXml加载器。因为当您使用FXml
loader加载fxml文件时,它将一次又一次地递归创建MainOverviewTab。因此会导致堆栈溢出错误。如果您从构造函数中删除代码并从显式方法中调用它将起作用。

public static void mainTabLoader() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("main_overview_tab.fxml"));
    // fxmlLoader.setRoot(content);
    // fxmlLoader.setController(this);

    try {
        fxmlLoader.load();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

2020-11-26