Ожидайте закрытия FileChooser для прерывания выполняемой задачи.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Ожидайте закрытия FileChooser для прерывания выполняемой задачи.

Сообщение Anonymous »

В отдельном потоке новая задача инициирует диалог с файлом через объект FileChooser для сохранения данных в Формат Excel или JSON.
Метод 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();
});
Моя проблема заключается в том, что если пользователь закроет это диалоговое окно, кнопки saveButton и backButton в представлении будут отключены и никогда больше не будут включены, потому что задача запущена и никогда не завершится и не будет отменена.
Как определить, что диалоговое окно закрыто, и снова включить кнопки?

Подробнее здесь: https://stackoverflow.com/questions/793 ... uning-task
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»