Auf Ende von ExecutorService warten und GUI update

ratbar

Grünschnabel
Hallo zusammen,

ich habe da ein kleines Problem...

Ich habe ein Programm das in zwei Threads per ExecutorService.execute() Daten einlesen. In den Threads wird dem Benutzer über ProgressMonitor der Fortschirtt der Aktion angezeigt. (Das ist auch der Grund warum ich das Einlesen in einen eigenen Thread ausgelagert habe).

Das klapt auch sehr gut. Nur soll das Programm jetzt warten bis alle Daten eingelesen werden. Darauf warte das Programm wie folgt:

Code:
ExecutorService1.shutdown();
ExecutorService2.shutdown();
while (!ExecutorService1.isTerminated() || !ExecutorService2.isTerminated()) {
  try {
    TimeUnit.SECONDS.sleep(1L);
  } catch (InterruptedException e1) {
    e1.printStackTrace();
  }
}

Dumm nur das damit wieder verhindert wird das der ProgressMonitor aufgefrischt wird und somit die Info für den Anwender futsch ist.

Hat jemand einen Tipp für mich wie ich in der While- Schleife warten und gleichzeitig den Update des GUI's zulassen kann?

Danke.
 
Auf jeden Fall solltest du den Event-Dispatching-Thread (in dem der obige Code offensichtlich ausgeführt wurde) niemals "schlafen legen". Stattdessen würde ich in den shutdown-Methoden der ExecutorServices jeweils AWT-Events in die AWT-Event-Queue "einschleußen" und dann anschließend diese Events per Listener abfangen und von der GUI verarbeiten lassen.
 
Zurück