2016-11-28 4 views
0

Я написал небольшое приложение, которое, среди прочего, делает вызов REST API JIRA REST, связанный с загрузкой. У меня есть индикатор выполнения, показывающий ход загрузки. Однако на самом деле мне нужно сделать два вызова REST. Первый должен быть закончен до начала второго. Между ними мне нужно обновить интерфейс.Задача загрузки Java (FX) 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 

Как я могу гарантировать, что все функции, показанные выше, выполняются именно в таком порядке?

Спасибо за помощь!

+0

Как эти 2 методы, начинающиеся задачи под названием? Почему вы не можете объединить их с одной «Задачей»? – fabian

+0

Спасибо, теперь найдено решение только с одной задачей! –

ответ

0

Вы можете использовать EcecutorService с одним потоком для управления планированием:

ExecutorService service = Executors.newSingleThreadExecutor(); 

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

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

Спасибо, я тоже попробовал, и это помогло мне решить подобную проблему! –