Метод getFileSavingDialogue запускает диалог сохранения файла с использованием Platform.runLater справиться с этим на Поток пользовательского интерфейса как операция пользовательского интерфейса
Эта функция возвращает только файл, который пользователь выбирает после нажатия кнопки сохранения в диалоговом окне. Чтобы облегчить это, используется файл AtomicReferencefileRef. Цикл продолжается до тех пор, пока файл не будет выбран и на него не ссылается fileRef.
Код: Выделить всё
private File getFileSavingDialogue() {
AtomicReference fileRef = new AtomicReference();
Platform.runLater(() -> {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Save publications");
FileChooser.ExtensionFilter extFilter;
if (Objects.equals(savingOption, "excel")) {
extFilter = new FileChooser.ExtensionFilter("Excel (*.csv)", "*.csv");
fileChooser.setInitialFileName("result.csv");
} else {
extFilter = new FileChooser.ExtensionFilter("JSON file", "*.json");
fileChooser.setInitialFileName("result.json");
}
fileChooser.getExtensionFilters().add(extFilter);
fileRef.set(fileChooser.showSaveDialog(parentWindow));
});
while (fileRef.get() == null) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
return fileRef.get();
}
Код: Выделить всё
@Override
protected Void call() {
FINAL_PATH = getFileSavingDialogue().getAbsolutePath();
try {
Thread.sleep(3000);
if (savingOption.equals("excel"))
if (saveToExcel())
System.out.println("Writing Excel file was successful");
else if (savingOption.equals("json"))
if (saveToJSON())
System.out.println("Writing JSON file was successful");
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
return null;
}
Код: Выделить всё
saveButton.setOnAction(event -> {
saveButton.setDisable(true);
backButton.setDisable(true);
SavePublications saveDataTask = new SavePublications(rootNode.getScene().getWindow(), result);
if (currentOption.equals("excel"))
saveDataTask.setSavingOption("excel");
else
saveDataTask.setSavingOption("json");
saveDataTask.setOnSucceeded(e -> {
saveButton.setDisable(false);
backButton.setDisable(false);
});
saveDataTask.setOnCancelled(e -> {
saveButton.setDisable(false);
backButton.setDisable(false);
});
new Thread(saveDataTask).start();
});
Как определить, что диалоговое окно закрыто, и снова включить кнопки?
Подробнее здесь: https://stackoverflow.com/questions/793 ... uning-task