Так что здесь много неправильного (преувеличение для эффекта), но вы учитесь, поэтому я сделаю все возможное, чтобы помочь. Пожалуйста, прочитайте все это перед копированием и вставкой в вашу программу, чтобы вы поняли это
Причина, по которой вы получили нулевой указатель, была в том, что у вас было extend DashBoardUserController
, что означает, что DashBoardUserController
, с которым была инициализирована программа, не говорил с вашим TheatresController
, и когда вы пытались доступ к нему дал нулевой указатель, потому что в расширенном классе ничего не было инициализировано
Итак, Шаг 1 удалите extend DashBoardUserController
Итак, поскольку этого нет, нам нужно получить ссылку DashBoardUserController
на этот класс, чтобы он мог вызывать необходимые методы, которые мы можем сделать при инициализации TheatresController
, например,
FXMLLoader loader = new FXMLLoader(getClass().getResource(resourceLocation));
Pane pane = loader.load();
TheatresController controller = loader.getController();
controller.setDashBoardUserControllerReference(this);//We'll get here
Далее нужно сделать необходимые методы и переменные в TheatresController
private DashboardUserController dashboardUserController;//Set at top of class
public void setDashBoardUserControllerReference(DashboardUserController dashboardUserController){
this.dashboardUserController = dashboardUserController;
}
Готово, это исправит нулевой указатель, перемещающийся для генерирования вашего метода, потому что есть много кода, который для вас не нужен, набрав
@FXML
public void onjosephclick() {
//weekPickerInput(); //You can delete from here
//addFilmsInList();
//filmList.setShowLocation("Joseph P");
//System.out.println("joseph button pressed");
//try {
// Pane pane = FXMLLoader.load(getClass().getResource("scenes/josephpane.fxml"));
// seatsSelection.getChildren().setAll(pane);
//} catch (IOException e) {
// System.out.println(e);
//}
//setStuff();
//seatsavailable.setText(Integer.toString(seatsJoseph));
//filmPrice = filmList.searchFilm().get().getPrice();
//System.out.println("Price:"+filmPrice); //Down to here
genericOnClick("Joseph P","scenes/josephpane.fxml",seatsJoseph);
//change the strings for each call and remove the unnecessary stuff
//in the methods it will clean it up a lot
}
private void genericOnClick(String location, String resourceLocation, int seats) {
weekPickerInput();
addFilmsInList();
filmList.setShowLocation(location);
System.out.println("Location:"+location);
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource(resourceLocation));
Pane pane = loader.load();
TheatresController controller = loader.getController();
controller.setDashBoardUserControllerReference(this);
seatsSelection.getChildren().setAll(pane);
} catch (IOException e) {
System.out.println(e);
}
setStuff();
seatsavailable.setText(Integer.toString(seats));
filmPrice = filmList.searchFilm().get().getPrice();
System.out.println("Price:"+filmPrice);
}
Некоторые другие вещи, которые можно научиться изучать в конечном итоге, это соглашения об именах java, связанные с репликацией кода. Я видел хороший объем кода, который можно обобщить, как я показал вам в приведенном выше методе
Код удачи на сэр. Если он не работает, я могу опубликовать полный класс, но я думаю, что вы должны попытаться выяснить это как хорошую практику, и я дал вам весь код, который вам нужен, дайте мне знать, если вам нужна дополнительная помощь