Как повторить задание на основе пользовательского ввода в поле Alert - PullRequest
0 голосов
/ 19 апреля 2019

Мое приложение JavaFX при запуске показывает модальное окно прогресса, в котором пытается загрузить файл с сервера. После успешной загрузки мое модальное окно прогресса закрывается и показывает главное окно. В случае сбоя при загрузке файла отображается окно предупреждения с кнопкой для повторной загрузки.

Моя проблема не может найти способ повторить загрузку, когда кнопка повтора нажата в окне предупреждения. Практически любая функция, которую я добавляю в if-else, относящуюся к параметру повтора, выполняется, кроме повторного запуска задачи.

public class progressController implements Initializable {
    public KiteDataKit kdk;
    private Thread downloadThread;
    Task<String> work = DoWorkNow();

@Override
public void initialize(URL location, ResourceBundle resources) {
    progressBar.progressProperty().bind(work.progressProperty());
}

public void startDownload()
{
    downloadThread =  new Thread(work);
    downloadThread.start();
    work.setOnSucceeded((e) -> {
        if (work.getValue() == "success") {
            masterOverviewController.populateVBox();
            closeWindow();
        }
        else if(work.getValue() == "retry"){
            printrandom(); //this gets printed
            alternateDownload(); //this doesnot work
        }
    });
}

public void printrandom(){
        System.out.println("sdfsdfsdfsd");
}

public void alternateDownload(){
    Thread downloadThread1 =  new Thread(work);
    downloadThread1.start();
}



public Task<String> DoWorkNow() {
    return new Task<>() {
        @Override
        protected String call() throws ExecutionException, InterruptedException {
            String result;
            kdk.getInstrumentList();
            if (kdk.downloader.instrumentDownloaded) {
                result = "success";
            } 
            else {
                Platform.runLater(showAlert);
                if ((boolean) showAlert.get()) {
                    printrandom();
                    result = "retry";
                } 
                else {
                    result = "exit";
                }
            }
            return result;
        }

        @Override
        public boolean cancel(boolean stopDownload) {
            System.out.println("Cancelled");
            return super.cancel(stopDownload);
        }

        final FutureTask showAlert = new FutureTask(() -> {
            Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
            alert.getButtonTypes().clear();
            alert.getButtonTypes().add(new ButtonType("Retry", ButtonBar.ButtonData.OK_DONE));
            alert.getButtonTypes().add(new ButtonType("Exit", ButtonBar.ButtonData.CANCEL_CLOSE));
            Optional<ButtonType> result = alert.showAndWait();
            if (result.get().getText() == "Retry") {
                System.out.println("Selected retry."); //this works
                return true;
            } else {
                System.out.println(result.get());
                System.out.println("requested exit app"); //this works
                return false;
            }
        });
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...