2017-09-15 1 views
0

Ich muss Liste der Futures erstellen, um zu steuern, wenn alle Aufgaben (in JavaFX) abgeschlossen sind. Also habe ich den folgenden Code.Wie zu beheben Zukunft <CAP#1> kann nicht in Zukunft <Void> umgewandelt werden?

import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Future; 
import javafx.concurrent.Task; 

... 
ExecutorService actionExecutor = ...; 
List<Future<Void>> futures = new ArrayList<Future<Void>>(); 
Task<Void> task = new Task<Void>() { 
    @Override 
    public Void call() { 
     .... 
     return null; 
    } 
}; 
Future<Void> future = actionExecutor.submit(task); //LINE X 
futures.add(future); 

Bei LINE X ich Future<CAP#1> cannot be converted to Future<Void>. Was ist mein Fehler?

+0

Vorausgesetzt, dass sie 'Future ' s sind, können Sie nicht besonders an dem Ergebnis interessiert sein. Warum nicht einfach 'Future ' verwenden? –

+0

@Andy Turner Vielen Dank für Ihren Kommentar. Natürlich kann ich. Aber ich möchte verstehen, was ich falsch mache und diesen Fehler in Zukunft nicht machen. –

Antwort

1

javafx.concurrent.Task ist ein Runnable, wenn Sie es also an ExecutorService.submit(Runnable) übergeben, wird Future<?> zurückgegeben.

Wenn Sie möchten ExecutorService.submit eine Future<Void> zurückgeben, müssen Sie eine Callable<Void>; oder geben Sie den Rückgabewert über actionExecutor.submit(task, null) ein.

Alternativ zur Verwendung von Future<?> als Variablentyp/Listenelementtyp wechseln.

Verwandte Themen