java .lang.NullPointerException при попытке получить текст текстового поля в mainApp, когда приложение закрывается - PullRequest
0 голосов
/ 17 марта 2020

Я новичок в javaFX и пытаюсь получить значение текстового поля, когда мое приложение закрывается, поэтому я использовал

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml"));
FXMLController controllerClass = loader.getController();
loader.load();
controllerClass.getTextFieldValue();
System.out.println("closing");

внутри

stage.setOnCloseRequest()

, но я всегда получить java .lang.NullPointerException.

это getTextfieldValue ()

System.out.println(textField.getText());

, так что в основном это то, чего я хочу достичь, я хочу получить значение в текстовом поле когда моя заявка закрывается. поэтому у меня есть stage.onCloseRequest() метод в моем классе mainApp, но textField.getText () всегда возвращает пустую строку. И я хочу, чтобы он возвращал текущий текст в textField.

Ответы [ 3 ]

2 голосов
/ 17 марта 2020

Вы должны запустить load(), прежде чем получите контроллер.

Попробуйте этот код:

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml"));
loader.load();
FXMLController controllerClass = loader.getController();
controllerClass.getTextFieldValue();
System.out.println("closing");
0 голосов
/ 23 марта 2020
  • Чтобы удалить исключение NullPointerException, сначала запустите load() до получения контроллера.
  • Чтобы получить значение текстового поля при закрытии приложения, я использовал класс Preferences из java .util .prefs, чтобы сохранить содержимое текстового поля, затем я переопределил метод stop() в моем mainApp и вернул сохраненное в нем значение.

Не уверен, что это лучший способ сделай это, но у меня это сработало, спасибо за помощь.

0 голосов
/ 17 марта 2020

Вы забыли добавить fx:id в ваш Scene.fxml? Пожалуйста, предоставьте больше примеров вашего кода. Я не знаю, что происходит в вашем файле FXML. Я думаю, что, возможно, отсутствует какой-то код xml.

Хотя я не знаю, чего вы пытаетесь достичь, но я думаю, что есть более простой и правильный способ сделать это.

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml")));
loader.setController(new FXMLController()); // you can not get controller, unless you set it first
FXMLController controllerClass = loader.getController();
controllerClass.getTextFieldValue();

Это всегда будет null, если вы не установите значение getTextFieldValue до

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...