ExecutorService.Submit(Callable<T>)方法返回了Future<T>对象的null值。

5
我正在使用ExecutorService来生成线程以执行不同的任务。当调用submit(Callable<T>)方法时,它应该返回一个Future<T>对象。但实际上,它返回的是null。因此,当调用Future<T>.get()方法时,会出现NullPointerException错误。
有人遇到过这个问题吗?或者,我做错了什么吗?
ArrayList<Boolean> resultsList = new ArrayList<Boolean> ();
ExecutorService excutorService  = Executors.newCachedThreadPool();
for(ClassImplementingCallable myClassImplementingCallable : listOfClassesImplementingCallable) {
    resultsList.add( excutorService.submit( myClassImplementingCallable ) );
}
excutorService.shutdown();
for ( Future< Boolean > result : resultList ) {
    result.get(); // getting exception here..
}

请不要在您的问题中使用HTML标签。 - assylias
callable 返回的值是什么? - Arun P Johny
你弄清楚发生了什么了吗? - Marsellus Wallace
2个回答

3
令人惊讶的是,您居然编译了代码:您试图将一些Future<Boolean>添加到List<Boolean>中... resultsList 应该声明为:
List<Future<Boolean>> resultsList = new ArrayList<Future<Boolean>> ();

除此之外,按照目前的代码,你不应该收到NPE异常,除非listOfClassesImplementingCallable中的myClassImplementingCallable有一个是null。

当然,我会检查的。谢谢你的回复! :) - user2024707

0

你应该使用 List<Future<Boolean>> resultsList = new ArrayList<Future<Boolean>>();

    for ( Future< Boolean > result : resultList ) {
    result.get(); // getting exception here..
}

你的代码中resultsList不是一个数组


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接