gpt4 book ai didi

java - 为什么从 Futures 获取值时会出现 NullPointerException?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:47 29 4
gpt4 key购买 nike

我正在使用和 ExecutorService同时运行一些 Callables .这是我的代码的简化版本:

ArrayList<Book> objResults = new ArrayList<Book>();
ExecutorService esrExecutor = Executors.newFixedThreadPool(2);
Set<Callable<ArrayList<Book>>> setCallables = new HashSet<Callable<ArrayList<Book>>>();

setCallables.add(new Callable<ArrayList<Book>>() {

public ArrayList<Book> call() throws Exception {
ArrayList<Book> objAmazonResults = new ArrayList<Book>();

try {
Amazon objAmazon = new Amazon();
objAmazonResults = objAmazon.doSearch(strQuery);
} catch (Exception e) {
e.printStackTrace();
}
return objAmazonResults;
}

});


List<Future<ArrayList<Book>>> lstFutures;
try {
lstFutures = esrExecutor.invokeAll(setCallables);

for(Future<ArrayList<Book>> futFuture : lstFutures){
if (futFuture.get().isEmpty() == false) //NullPointerException occurs here
objResults.addAll(futFuture.get());
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}

esrExecutor.shutdown();

我得到一个 NullPointerException关于这段代码 if (futFuture.get().isEmpty() == false) .我似乎无法弄清楚这段代码为什么或如何可能为空。

如果你看我的Callable你会看到我捕获所有异常并简单地打印堆栈跟踪,我总是返回 new ArrayList<Book>() .

我不太愿意帮助其他人调试我在 SO 上的代码汤,但有时每个人都会遇到障碍,但这种异常教会了我一件事——当将方法链接在一起时,调试总是更难。

最佳答案

可能 objAmazon.doSearch(strQuery) 返回 null?在 Callable 中插入对此的检查。

Future 本身永远不应该为 null,并且 Future.get() 不会返回 null,如果计算因异常而终止(因此在Callable 不是必需的)。

关于java - 为什么从 Futures 获取值时会出现 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584499/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com