Я прочитал несколько похожих сообщений на эту тему, но не смог использовать их для решения своей проблемы.Я считаю, что моя неудача связана с пониманием, а не с тем, что я сталкиваюсь с уникальной проблемой.Но я нахожусь в полном тупике.
Я создаю приложение CRUD с использованием JavaFX.Одна из кнопок моего приложения, «Импорт данных», выдает NullPointerExceptions:
// *a button that opens a new window with a textField where the user can paste text data*
@FXML
private void importDataButton(ActionEvent event) {
// *load the fxml file*
URL viewLocation = getClass().getResource("/importView.fxml");
// *get the file's controller*
FXMLLoader loader = new FXMLLoader();
ImportController importController = loader.getController();
importController.setMainController(this);
loader.setLocation(viewLocation);
try {
loader.load();
} catch (IOException exception) {
System.out.println("IO Exception thrown.");
return;
}
....
}
Я пока не очень хорошо отлаживаю IntelliJ, но я использовал его, чтобы определить, что объект FXMLLoader равен нулю.Поэтому, когда
importController.setMainController(this);
выполняется, генерируется исключение NullPointerException, поскольку объект , на который ссылается , равен нулю.Я думаю.Поэтому
ImportController importController = loader.getController();
не может извлечь контроллер из объекта FXMLLoader (загрузчик).
Для справки setMainController () находится в другом классе с именем ImportController, и код этого метода выглядит следующим образом:
public void setMainController(MainController mainController) {
this.mainController = mainController;
}
Вещи, которые я пробовал:
Я прочитал этот пост и этот пост , обарекомендую мне запустить loader.load () [учитывая FXMLLoader loader = new FXMLLoader ()], чтобы получить данные из объекта.Тем не менее, я попробовал это, и я просто получаю ошибки при ошибках: InvocationTargetExceptions и IllegalStateExceptions.Я также попытался создать экземпляр объекта FXMLLoader, который не является нулевым, используя
FXMLLoader load = new FXMLLoader(getClass.getResource("sample.fxml"));
Но, похоже, он не влияет на содержимое объекта (и да, я заменяю "sample.fxml" намое имя файла.)
Я ненавижу делать подобное сообщение, но я не знаю, что делать.