0

很久以前,我从我的前同事那里得到了为他工作的代码,但我无法让它工作。

使用调试器,我得出结论,我的类在这个方法上有断点:

((Map<String, List<byte[]>>)metaData).put(HEADERELEMENTS, headerOMElements); 

put方法有声明 - String key, List <byte[]> value。我也试过

((Map<String, List<byte]>>)metaData).put("HEADERELEMENTS",headerOMElements);

但情况是一样的。我的printStackTrace回报NullPointerException。我做了记录headerElements

number of headerOMElements (headerOMElements.size();)=1
headers are(before calling the method PUT) (headerOMElements.toString();): [[B@d000d]

如何断定是什么问题并解决它?我不是高级 Java 专家,所以我真的需要帮助。

4

2 回答 2

3

根据您提供的有限信息,并假设它是准确的,此时可以抛出a的唯一可能方式1是 if is 。NullPointerExceptionmetaDatanull

所以 ...

修改您的代码以打印出您认为正在抛出 NPE 的语句metaData 之前的值;例如

System.err.println("metaData is " + metaData);

如果输出显示metaData是这样null,那么下一步就是检查您的代码以找出原因null。很可能你还没有初始化它,或者你已经从其他地方传入它并且它也在null那里。

如果输出显示metaDataNOT null,那么您在问题中陈述的事实/假设之一必须是不正确的。为了进一步诊断,我们需要:

  • 真实的代码,复制和粘贴(不是像你所做的那样输入......基于错别字),和
  • 完整的堆栈跟踪。

1 - 对于某些类型,Map如果密钥是 ,您也可以获得 NPE null。但是,该异常将put()方法调用中引发。此外,您说当您使用文字字符串作为键时会遇到同样的问题。所以不能这样解释。唯一可能的解释是有多个线程在没有同步的情况下更新映射。这可能会给出一个 NPE(随机),但 NPE 将在实例中put或其他一些方法中。Map

于 2013-04-28T12:03:12.517 回答
1

如果要放入地图的数据不为空,则在放入之前,您的地图可能为空,并且您会收到 NullPointerException。

或者在其他任何地方抛出异常。

于 2013-04-28T10:57:44.670 回答