.getText() элемента из fxml
Хочу получить текст из элемента surname_visitor. Вылетает NullPointerException.
FXML:
<TextField fx:id="passport_visitor" prefHeight="40.0" prefWidth="250.0" promptText="2816765432" GridPane.valignment="BOTTOM" />
<TextField fx:id="surname_visitor" prefHeight="40.0" prefWidth="250.0" promptText="Иванов" GridPane.rowIndex="1" GridPane.valignment="BOTTOM" />
<TextField fx:id="name_visitor" prefHeight="40.0" prefWidth="250.0" promptText="Иван" GridPane.columnIndex="1" GridPane.rowIndex="1" GridPane.valignment="BOTTOM" />
<TextField fx:id="phone_visitor" prefHeight="40.0" prefWidth="250.0" promptText="89121120975" GridPane.halignment="CENTER" GridPane.rowIndex="2" GridPane.valignment="BOTTOM" />
<TextField fx:id="otchestvo_visitor" prefHeight="40.0" prefWidth="250.0" promptText="Иванович" GridPane.columnIndex="2" GridPane.rowIndex="1" GridPane.valignment="BOTTOM" />
Controller:
public class add_visitorController {
@FXML
public static Button add_new_visitor; //функция add_new
@FXML
public static TextField surname_visitor;
void add_new(ActionEvent event) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setContentText(surname_visitor.getText());
alert.showAndWait();
}
}
Ошибка:
Cannot invoke "javafx.scene.control.TextField.getText()" because
"sample.add_visitorController.surname_visitor" is null
Укажите, пожалуйста, что может быть не так.
Ответы (1 шт):
У вас поля контроллера статические. Грубо говоря ваш Контроллер пытается вытащить текст из пустого TextField, а не того, что у вас в FXML прописан. Просто уберите static.
Если возникает проблема с передачей поля другим классам, то вы в этот класс передавайте ссылку на ваш TextField используя this.
Что касается public void initialize(){} код указанный в этих скобках, сработает перед сборкой всего приложения. Здесь нужно быть очень аккуратным, потому что любая неграмотная работа с неинициализированной переменной или полем, вызовет краш.Например IDE IDEA вообще даже не выдает в подсказках этот метод, его можно прописать только вручную, на свой страх и риск так сказать...
Так же не совсем понятно, по вашему коду, связан ли вообще контроллер с файлом FXML. Вот пример связки.
<Pane fx:id="mainPain" prefHeight="450.0" prefWidth="900.0"
style="-fx-background-color: black;" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.startController.Controller" />
Обратить внимание на : fx:controller= путь к файлу где точка это указание
пакета(пути/папки)
package sample.startController;
import javafx.fxml.FXML;
import javafx.scene.layout.Pane;
public class Controller {
@FXML
private Pane mainPain;
public void initialize(){
// Some code
}
}