Проблема описана в трассировке стека:
Caused by: java.lang.NoSuchMethodException: com.buddhikajay.controller.NewTransactionDialogController.()
, которая в основном говорит, что ваш класс контроллера не имеет конструктора с нулевым аргументом.
По умолчанию FXMLLoader
создаст контроллер, вызвав его конструктор с нулевым аргументом. Удалите конструктор, который вы определили в классе контроллера, или удалите требуемые параметры.
Если вам действительно нужно передать аргументы конструктору контроллера, вы можете либо создать контроллер в Java-коде, либо передать его в FXMLLoader:
NewTransactionDialogController controller = new NewTransactionDialogController(someValue);
FXMLLoader loader = new FXMLLoader();
loader.setLocation(...);
loader.setController(controller);
AnchorPane anchorPane = loader.load();
(используя этот код, вы должны удалить атрибут fx:controller
из FXML.)
Или установить фабрику контроллера:
FXMLLoader loader = new FXMLLoader();
loader.setLocation(...);
loader.setControllerFactory(clazz -> {
if (clazz == NewTransactionDialogController.class) {
return new NewTransactionDialogController(someValue);
} else {
// default behavior:
try {
return clazz.newInstance();
} catch (Exception exc) {
throw new RuntimeException(exc);
}
}
});
AnchorPane anchorPane = loader.load();
(в этой версии оставить атрибут fx:controller
в файле FXML.)