В общем. Такая ситуация.
Передаю из главного класса в класс-контроллер окна настроек список, с установленными за ранее в главном классе значениями через конструктор. Вот код класса main:
public class MainClass extends Application {
private Stage primaryStage;
private BorderPane rootLayout;
private Settings settings;
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Антикафе");
initRootLayout();
showPersonOverview();
}
private ObservableList<Settings> Data = FXCollections.observableArrayList();
public MainClass() {
Data.add(new Settings(false,false,false,false));
}
public ObservableList<Settings> getData() {
return Data;
}
public boolean showSettingsDialog() {
try {
// Загружаем fxml-файл и создаём новую сцену
// для всплывающего диалогового окна.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainClass.class.getResource("view/settings.fxml"));
AnchorPane page = (AnchorPane) loader.load();
// Создаём диалоговое окно Stage.
Stage dialogStage = new Stage();
dialogStage.setTitle("Настройки");
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.initOwner(primaryStage);
Scene scene = new Scene(page);
dialogStage.setScene(scene);
// Передаём список настроек в контроллер.
ButtonSettingsControll controller = loader.getController();
controller.setDialogStage(dialogStage);
controller.setData(Data);
controller = new ButtonSettingsControll(Data);
// Отображаем диалоговое окно и ждём, пока пользователь его не закроет
dialogStage.showAndWait();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
}
Вот код самого контроллера:
public class ButtonSettingsControll {
private Stage dialogStage;
@FXML
public CheckBox checkKal;
@FXML
public CheckBox checkStopCheck;
@FXML
public CheckBox checkTea;
@FXML
public CheckBox checkVIP;
@FXML
public TextField kalHard;
@FXML
public TextField kalNorm;
@FXML
public TextField kalLight;
@FXML
public TextField priceTea;
@FXML
public TextField priceUnd;
@FXML
public TextField peoplsUndo;
@FXML
public TextField priceTo;
@FXML
public TextField peoplsTo;
@FXML
public TextField priceStopCheck;
private MainClass mainClass;
private ObservableList<Settings> Data = FXCollections.observableArrayList();
public void setMain(MainClass mainClass) {
this.mainClass = mainClass;
}
public void setData(ObservableList<Settings> data) {
Data = data;
}
//Пока не разберусь со списком для наглядности буду использовать это
Boolean CK = false;
Boolean CT = false;
Boolean CV = false;
Boolean CC = false;
public void setDialogStage(Stage dialogStage) {
this.dialogStage = dialogStage;
}
public ButtonSettingsControll() {
}
public ButtonSettingsControll(ObservableList<Settings> data) {
Data = data;
System.out.println(Data.get(0).getCheckK());
checkKal.setSelected(data.get(0).getCheckK());
}
@FXML
private void initialize() {
if(CK)
checkKal.setSelected(true);
else {
checkKal.setSelected(false);
kalHard.setDisable(true);
kalNorm.setDisable(true);
kalLight.setDisable(true);
}
if(CT)
checkTea.setSelected(true);
else {
checkTea.setSelected(false);
priceTea.setDisable(true);
}
if(CV)
checkVIP.setSelected(true);
else {
checkVIP.setSelected(false);
priceUnd.setDisable(true);
priceTo.setDisable(true);
peoplsTo.setDisable(true);
peoplsUndo.setDisable(true);
}
if(CC)
checkStopCheck.setSelected(true);
else {
checkStopCheck.setSelected(false);
priceStopCheck.setDisable(true);
}
}
@FXML
private void settings() {
Data.setAll(new Settings(checkKal.isSelected(),checkTea.isSelected(),checkVIP.isSelected(),checkStopCheck.isSelected()));
System.out.println(Data.get(0).getCheckK());
dialogStage.close();
}
}
Не могу понять, почему мне выдает исключение (java.lang.NullPointerException), при вызове окна настроек.
Исключение появляется вот в этом блоке:
public ButtonSettingsControll(ObservableList<Settings> data) {
Data = data;
System.out.println(Data.get(0).getCheckK());
checkKal.setSelected(Data.get(0).getCheckK());
}
А именно тут
checkKal.setSelected(data.get(0).getCheckK());
.
Вывод в консоль срабатывает, (для проверки сделал) но когда я пытаюсь использовать то же самое значение для установки флажка в чекбоксе - программа падает из-за этого исключения. Подскажите плз что не так.