2017-09-15 94 views
0

我需要創建期貨列表來控制何時完成所有任務(在JavaFX中)。所以我有以下代碼。如何修復未來<CAP#1>無法轉換爲未來<Void>?

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); 

LINE X我得到Future<CAP#1> cannot be converted to Future<Void>。我的錯誤是什麼?

+0

鑑於他們是'未來's,你不能特別感興趣的結果。爲什麼不使用'Future '? –

+0

@Andy Turner感謝您的評論。當然,我可以。但我想明白我做錯了什麼,而不是在將來犯這個錯誤。 –

回答

1

javafx.concurrent.TaskRunnable,所以當你將它傳遞給ExecutorService.submit(Runnable)時,返回一個Future<?>

如果你想ExecutorService.submit返回Future<Void>,你必須提交一個Callable<Void>;或通過actionExecutor.submit(task, null)提供返回值。

或者,更改爲使用Future<?>作爲變量類型/列表元素類型。

相關問題