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

问题描述 投票:5回答:1

以下代码段在独立模式下执行时不会引发任何错误。当我将其部署到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将是一个选项,但这不会杀死异步处理的概念吗?换句话说,我在StringBuilder中收集可调用get的输出字符串,并在get计数达到特定数字时存储到磁盘。数据发送到磁盘后,我将刷新StringBuilder。这样,我可以定期将数据推送到磁盘,而不必将其保留在内存中。

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

java nullpointerexception callable
1个回答
4
投票

这是固定的。如果可能有用:

问题在于变量的声明方式。我必须将一个类级变量声明为静态变量,因此对此变量进行的任何更改都开始反映到其他地方。奇怪的是,当独立执行该问题时,我看不到该问题。

EDIT on 13112019: Moving my comment to the answer section, on request:

由于时间已经很久了,我没有完全收集变量的详细信息。但我相信它是以下之一:this.originalFileName,this.inProgressDirLoc,this.processedDirLoc,this.dataMDHolder,this.dataAccIDValueMap,this.dataCountryNameValueMap我必须将它们设置为静态值,作为由以下任何一项分配(或修改)的值该成员在类中引用变量时未进行反映。

© www.soinside.com 2019 - 2024. All rights reserved.