Java(FX)UI更新和(后台)下载任务

时间:2016-11-28 12:11:50

标签: java javafx concurrency synchronization

我写了一个小应用程序,其中包括对JIRA REST API进行REST调用以及下载问题。我有一个进度条指示下载的进度。但是,实际上我需要进行两次REST调用。第一个需要在第二个开始之前完成。在他们之间我需要更新UI。

下面是一些示例代码:

// Loads the dialog from the fxml file and shows it
@FXML
public void showProgressDialog() {
    mainApp.showDownloadProgressDialog();
}

// Retrieves some meta information
public void firstDownload() {
    Task<Void> task = new Task<Void>() {
        @Override
        public Void call() {
            // do something
        }
    };
    new Thread(task).start();
}
// Do some UI update

// Retrieves the actual issues
public void secondDownload() {
    Task<Void> task = new Task<Void>() {
        @Override
        public Void call() {
            for (int i = 0; i < limit; i++) {
                // so something
                updateProgress((double) i / (double) limit, max);
            }
        }
    };
    new Thread(task).start();
}
// Do some UI update

如何确保上面显示的所有功能都按此顺序执行?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用单个线程的EcecutorService来控制日程安排:

ExecutorService service = Executors.newSingleThreadExecutor();

service.submit(task1);
service.submit(task2);

// shutdown after last submitted task
service.shutdown();