Javafx java.lang.IllegalArgumentException:AnchorPane[id=klantroot,styleClass=root]已设置为另一个场景的根

Javafx java.lang.IllegalArgumentException:AnchorPane[id=klantroot,styleClass=root]已设置为另一个场景的根,javafx,modal-dialog,window,Javafx,Modal Dialog,Window,我正在尝试使用JavaFX构建一个简单的应用程序。问题是当我第一次打开一个窗口(模态)时,它运行良好。第二次它给了我这个例外: java.lang.IllegalArgumentException:AnchorPane[id=klantroot, styleClass=root]已设置为另一场景的根 因为我对这个很陌生,所以我真的不知道如何解决这个问题。有人能帮忙吗。先谢谢你 在我的主控制器中,我有以下代码: private void showModal(Parent view, String

我正在尝试使用JavaFX构建一个简单的应用程序。问题是当我第一次打开一个窗口(模态)时,它运行良好。第二次它给了我这个例外:

java.lang.IllegalArgumentException:AnchorPane[id=klantroot, styleClass=root]已设置为另一场景的根

因为我对这个很陌生,所以我真的不知道如何解决这个问题。有人能帮忙吗。先谢谢你

在我的主控制器中,我有以下代码:

private void showModal(Parent view, String title) {
    Stage stage = new Stage();
    Scene scene = new Scene(view);
    stage.setScene(scene);
    stage.initModality(Modality.WINDOW_MODAL);
    stage.initOwner(this.root.getScene().getWindow());
    stage.setTitle(title);
    stage.showAndWait();
}

@FXML
private void handleToevoegenKlant() {
    klantPresenter.setKlant(-1);        
    showModal(klantPresenter.getView(), "Toevoegen klant");
}
在我的三K党演讲者中,我有:

@FXML private Parent klantroot;

.....

public Parent getView() {
    return klantroot;
}

@FXML
private void close() {
    Stage stage = (Stage)getView().getScene().getWindow();
    stage.close(); 
}              
KlantView.fxml的代码以以下开头:

<AnchorPane 
    fx:id="klantroot"
    fx:controller="presenter.KlantPresenter"
    prefHeight="274.0" prefWidth="483.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">

每个
场景
只能有一个根元素,每个
父节点
节点只能设置为一个场景的根元素。若要将父对象设置为另一场景的根对象,需要断开以前的关系

代码
场景场景=新场景(视图)showmodel(…)
方法中的code>将视图指定为场景的根。因此,当使用父视图的相同实例再次调用
showmodel(…)
时,将出现错误

解决方案可能因应用程序逻辑而异:

1) 创建父视图的新实例并将其作为参数发送

2) 将行添加到
showmodel(…)

打破旧关系


3) 您自己的解决方案?

我也遇到了类似的问题,但当我尝试设置根时,我发现scene'e root不能为null。
if(view.getScene() != null)
    view.getScene().setRoot(null);