У меня есть два графических интерфейса, называемые A и B, каждый со своим контроллером (ControllerA и ControllerB).
Моя программа довольно проста: она начинается с открытия A, и есть кнопка, которая при нажатии открывает B. И наоборот, у B есть кнопка, которая открывает A.
ControllerA имеет один метод, называемый «openA», а ControllerB имеет один метод, называемый «openB».
Итак, A нужен контроллер B, чтобы открыть B, и наоборот.
Я смотрел учебное пособие, и способ, которым он занимается связью с контроллером, следующий:
Код: Выделить всё
public class ControllerA{
public void onPressingButtonB(ActionEvent e) throws IOException{
FXMLLoader loaderB = new FXMLLoader(getClass().getResource("class-b.fxml"));
root = loaderB.load();
ControllerB controllerB = loaderB.getController();
controllerB.openB(e);
}
Код: Выделить всё
public class ControllerA{
private ControllerB controllerb;
{
try {
controllerb = loadControllerB();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public ControllerB loadControllerB() throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("class-b.fxml"));
root = loader.load();
return loader.getController();
}
public void onPressingButtonB(ActionEvent e) throws IOException{
controllerb.openB(e);
}
Дело в том... конечно, мне нужно сделать это зеркально с ControllerB, но это приводит к серьезной проблеме: если ControllerA создает экземпляр ControllerB при создании, а ControllerB создает экземпляр ControllerA при создании... это цикл. Фактически, он зацикливается и выдает мне ошибку в методе загрузки.
Мой вопрос: есть ли способ исправить мой код и создать контроллеры только один раз (чтобы мой прослушиватель действий мог быть всего одна строка кода), или мне придется повторно инициализировать контроллеры каждый раз, когда мне придется их использовать?
Большое спасибо.
Подробнее здесь: https://stackoverflow.com/questions/753 ... rs-methods