Судя по упомянутой вами ошибке, у вас уже есть объявление контроллера в файле F XML. как с атрибутом .. fx:controller
Обычно при наличии этого объявления атрибута в f xml, если вы попытаетесь установить контроллер снова, он выдаст Caused by: javafx.fxml.LoadException: Controller value already specified
И я считаю, что это должно может быть, потому что вы можете заметить, что ошибка возникает в processAttribute метод.
javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:980)
Вы можете удалить его из f xml или не нужно установить в коде (через setController ()). Если вы говорите, что вам нужна ссылка на контроллер, вы всегда можете пройти через loader.getController()
.
И в довершение всего, если вам удастся устранить ошибку Controller value already specified
, я думаю, что дальше вы встретите Caused by: javafx.fxml.LoadException: Root value already specified
.Потому что вы пытаетесь вызвать метод load () FXMLLoader два раза. Присвойте узел переменной и используйте эту переменную для установки во всплывающем окне.
Я полагаю, что приведенный ниже код должен решить проблему. Попробуйте !!
private void addRelease(Event event) throws IOException {
Popup popup = new Popup();
FXMLLoader loader = new FXMLLoader(getClass().getResource("Resources/newReleasePopup.fxml"));
Parent parent = (Parent)loader.load(); // I am not sure you need a cast here
newReleasePopupController controller = loader.getController();
popup.getContent().add(parent);
}
Предложение: Пожалуйста, используйте правильные правила именования класса.