InvocationTargetException when running a javafx program

Your MainController doesn’t have a zero-argument constructor. If the FXMLLoader encounters a fx:controller attribute on the root element, it attempts to create an instance of that controller by (effectively) calling the zero-argument constructor of the class specified in the attribute.

To fix this (the simplest way), remove the fx:controller attribute from the FXML file, and set the controller “by hand” on the FXMLLoader. You need to create an FXMLLoader instance instead of relying on the static load(...) method:

FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
loader.setController(new MainController(path));
Pane mainPane = loader.load();

Leave a Comment