【问题标题】:Parent unable to be assigned javafx fxmlloader无法分配父级 javafx fxmlloader
【发布时间】:2019-09-19 08:52:43
【问题描述】:

我的程序应该在初始运行时运行我的 SignIn.fxml,控制器名为 LoginController。但是,当我运行通常的代码时:

public void showLoginScreen() {
    try {
      FXMLLoader loader = new FXMLLoader(
              getClass().getResource("SignIn.fxml"));
      Parent root = (Parent) loader.load(getClass().getResource("SignIn.fxml"));
       scene = new Scene(root);
      LoginController.initManager(this);
    }catch (IOException ex) {
      Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
    }
  }

我得到一个异常声明

javafx.scene.Scene 不能转换为 javafx.scene.Parent

我无法理解这一点,因为它在过去的项目中对我有用。

我将场景设置为控制器类中的变量。

【问题讨论】:

  • 过去工作是什么意思? .fxml 中是否发生了任何变化?从 sn-p 中,您分享了它并不清楚您要实现的目标,但作为建议,请检查有关 fxml 加载器的oracle's link。在示例中,父级被正确转换,因为定义了 rootPane。
  • 它在过去适用于不同的程序,因为我之前使用它在我的程序的其余部分运行之前构建登录屏幕。我会再去查一下oracle的网站,但是之前几次都找不到问题。
  • 我找到了我的问题,别担心。你是对的,在某种程度上,我在我的 FXML 文件中动态创建了一个场景,从而产生了冲突,我解决了。
  • 很酷,然后放置响应并接受它作为答案。它可能会帮助其他有同样问题的人

标签: java javafx fxml fxmlloader


【解决方案1】:

我检查了我的 FXML 文件,发现问题的原因是我的 fxml 文件中的一个场景与我的控制器本身上动态创建的场景之间存在冲突。

【讨论】:

    【解决方案2】:

    Scene 不是 Parent 的实现。 父节点是父节点,可以作为场景的根节点。 场景本身是一个 on 类型。

    当 *.fxml 根是 Borderpane 或 Pane 或任何其他实现 Node 和 Parent 的对象时,它将起作用。

    你能告诉我们 *.fxml 也许你创建一个场景而不是一个 Parent/Node 吗?

    【讨论】:

    • 我添加了一个窗格作为根,它确实有效,我的问题是我动态创建了一个场景,并且在 fxml 本身中也是如此。正如我的回答和以前的 cmets 所述。
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多