2016-11-28 2 views
0

i schrieben eine kleine Anwendung, die unter anderem einen REST-Aufruf an einen JIRA-REST-API macht Probleme laden. Ich habe einen Fortschrittsbalken, der den Fortschritt des Downloads anzeigt. Allerdings muss ich eigentlich zwei REST-Anrufe machen. Der erste muss beendet sein, bevor der zweite beginnt. Dazwischen muss ich die Benutzeroberfläche aktualisieren.Java (FX) UI-Update und (Hintergrund) Download-Aufgabe

Nachfolgend finden Sie einige Beispiel-Code:

// 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 

Wie kann ich sicherstellen, dass alle Funktionen oben in genau dieser Reihenfolge gezeigt ausgeführt wird?

Danke für jede Hilfe!

+0

Wie heißen die zwei Methoden, um die Aufgaben zu beginnen? Warum kannst du sie nicht zu einer einzigen "Aufgabe" kombinieren? – fabian

+0

Dank fand ein nun eine Lösung mit nur einer Aufgabe! –

Antwort

0

Sie könnten ein EcecutorService mit einem einzigen Thread verwenden, um die Zeitplanung zu steuern:

ExecutorService service = Executors.newSingleThreadExecutor(); 

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

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

Danke, habe ich versucht, das auch, und es hat mir geholfen, ein ähnliches Problem zu lösen! –