Ожидание приложением нажатия кнопки для дальнейшего продолжения выполнения кода
Обучаюсь JavaFX практикуясь делая свое мини-десктоп приложение. Добрался до момента с созданием сохранений. И тут возникли проблемы:
При нажатии на слот сейва я задумал чтобы сначала по его имени проверяло пустой ли он. Если нет то появляется окно которое просит подтверждения перезаписи сейва. Если подтверждение получается то появляется новое окно где уже нужно вводить название нового сейва. Если сейв пустой то просто предлагается ввод названия.
И сразу столкнулся с тем что когда нажимаю на не пустое сохранение то код действия просто выполняется весь целиком. Т.е: Появляется окно подтверждения перезаписи и сразу же на нем, окно с вводом названия сейва.
Я предположил что скорее всего необходимо вывод окна с подтверждением нужно запускать в отдельном потоке, а основной поток заставить ждать его. Но с реализацией этого как-то не выходит. Во-первых: я задумывал вывод окна с вводом названия связать с булийной переменной значение которой зависело бы от нажатой кнопки при подтверждении, но компилятор никак не давал мне использовать не финализованные переменные, поскольку они во внутренних классах И во-вторых: Хотя новый поток я по идее сумел создавать то заставить код дожидаться нажатия кнопки я так и не сумел добиться.
Еще ища решения я не раз встретился с упоминаниями Task , Service и Platform.runLater и подозреваю что с их помощью возможно сумел бы добиться нужного, но не совсем понимаю - как.
Как мне исправить код и можно ли было бы где-то почитать о создании систем сохранения?
Вот сам код того что я привязал к кнопкам. Там много не совсем связного ибо много пытался так или иначе добиться идеи, но в целом надеюсь будет видно что задумано:
private void makeSave(ArrayList<Button> alButton, ObservableList<CheckBox> saveList) {
for( Button button : alButton)
boolean check = false;
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if(button.getText() != "Empty") {
new Thread(new Runnable() {
@Override
public void run() {
try {
saveStage.wait();
} catch (Exception ex) { ex.printStackTrace(); }
confirmSave();
}});
}
if(check) inputSaveName(button);
}
});
}
}