java.util.concurrent.ExecutionException:java.lang.NullPointerException错误

时间:2013-10-07 16:28:51

标签: java nullpointerexception callable

以下代码段在独立模式下执行时不会引发任何错误。当我将它部署到Web服务器[实现服务器的接口并作为JAR添加到类路径]时,我得到了

 java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at com.nbis.process.JSON_2_File_Split_V004.fn_1_parserEntity(JSON_2_File_Split_V004.java:256)
at com.nbis.process.JSON_2_File_Split_V004.fn_0_primaryCaller(JSON_2_File_Split_V004.java:177)
at com.nbis.process.JSON_2_File_Split_V004.execute(JSON_2_File_Split_V004.java:151)

代码段:

this.callable = new JSON_3_File_Process_V005(this.originalFileName, this.inProgressDirLoc, this.processedDirLoc, "[" + jSONRecord.toString() + "]", this.dataMDHolder, this.dataAccIDValueMap, this.dataCountryNameValueMap);
String[] fullContent = null;    
try {
    fullContent = executor.submit(this.callable).get();
} catch (ExecutionException e) {
    StringWriter errors = new StringWriter();
    e.printStackTrace(new PrintWriter(errors));
    log.info("Srii: " + errors.toString());
    executor.shutdown();
    return 7;
    } 

将get的返回值添加到ExecutorCompletionService是一个选项,但这不会破坏异步处理的概念吗?换句话说,当get计数达到特定数字时,我在StringBuilder中收集来自callable get的输出字符串并存储到磁盘。一旦数据发送到磁盘,我刷新StringBuilder。这样我就可以定期将数据推送到磁盘,而不必将它们保存在内存中。

有关我在这做什么错的任何建议吗?感谢任何输入。谢谢。

2 个答案:

答案 0 :(得分:4)

这是固定的。如果它有用:

问题在于声明变量的方式。我必须将类级变量声明为静态,因此应用于此变量的任何更改都会反映在其他地方。奇怪的是,当它独立执行时我会看到问题。

答案 1 :(得分:0)

我在春季休息项目中遇到的类似问题。我正在使用 @Autowired annotation 在 Callable Thread 类中注入一个对象。

那个对象有时会导致空指针异常。然后删除 @Autowired 注释并在构造函数中传递该对象,同时创建可调用线程类对象解决了我的问题。