FXML文档拒绝导入其他FXML文件

5

我有一个主FXML文档,其中包含一个TabPane。对于每个选项卡,我希望它都有自己的控制器和fxml文件。当我尝试将外部fmxl文件包含到主fxml文档中时,我的程序拒绝运行。以下是我的主FXML文档:

这是我的Java文件的副本

@Override
public void start(Stage stage) throws Exception {
    FXMLLoader fxml = new FXMLLoader();
    Parent root = fxml.load(getClass().getResource("FXMLDocument.fxml").openStream());

    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
    FXMLDocumentController fdc = fxml.getController();
}

错误:

Caused by: javafx.fxml.LoadException: Base location is undefined. unknown path:97

“refuses to run” 是什么意思?你有收到任何错误信息吗? - James_D
1
这行代码 fx:include source="Tab1.fxml"/> 开头缺少一个尖括号 < - ManoDestra
缺少括号是个打字错误。当我尝试运行它时,我已经插入了错误。谢谢 - user6129465
由于:javafx.fxml.LoadException: 基本位置未定义。 未知路径:97 来自此位置。您能同时发布您的控制器代码吗? - ManoDestra
谢谢,我已经上传了控制器代码。 - user6129465
不知道为什么这个问题中的FXML文件在某个时候被删除了。存在<fx:include>元素对于这个问题非常重要。 - James_D
1个回答

5
这个错误是由于您没有设置FXMLLoader的location属性,而是指定了一个InputStream来加载FXML造成的。我认为FXMLLoader必须知道原始fxml文件的位置才能解析包含文件的位置。只有在特殊情况下,例如从应用程序jar文件中的文件或资源加载fxml时,才应该使用load(InputStream)方法。相反,应该使用:
FXMLLoader fxml = new FXMLLoader();
fxml.setLocation(getClass().getResource("FXMLDocument.fxml"));
Parent root = fxml.load();

或者,等价地说,
FXMLLoader fxml = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
Parent root = fxml.load();

我能够使用InputStream通过在fx:include标签中使用包含的fxml文件的绝对路径来使其工作。然而,我认为改用setLocation是更好的方法。 - Danny Harding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接