2017-09-15 52 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<?>作为变量类型/列表元素类型。

相关问题