Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 映射类中的NullPointerException_Java_Map_Nullpointerexception - Fatal编程技术网

Java 映射类中的NullPointerException

Java 映射类中的NullPointerException,java,map,nullpointerexception,Java,Map,Nullpointerexception,很久以前,我从我的前同事那里得到了代码,他为我工作,但我无法让它工作 使用调试器,我得出结论,我的类在此方法处有断点: ((Map<String, List<byte[]>>)metaData).put(HEADERELEMENTS, headerOMElements); 但情况也是如此。MyprintStackTrace返回NullPointerException。 我记录了headerElements number of headerOMElements (hea

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

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

((Map<String, List<byte[]>>)metaData).put(HEADERELEMENTS, headerOMElements); 
但情况也是如此。My
printStackTrace
返回
NullPointerException
。 我记录了
headerElements

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

如何总结问题所在并解决问题?我不是高级Java专家,所以我真的需要帮助。

如果要放入映射中的数据不是空的,在放入之前,映射可能是空的,您会得到一个NullPointerException


异常会在其他任何地方引发。

如果要放入映射的数据不是空的,则在放入之前,映射可能为空,并且您会得到一个NullPointerException


异常会在其他任何地方引发。

基于您提供的有限信息,并假设它是准确的,唯一可能在该点引发
NullPointerException
的方法是如果
元数据
null

所以

修改代码,在您认为正在抛出NPE的语句之前立即打印出
元数据的值
;e、 g

System.err.println("metaData is " + metaData);
如果输出显示
元数据
,那么下一步就是检查代码,找出它为什么为
。很可能您没有初始化它,或者您从其他地方传入了它,并且它在那里也是
null

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

  • 真实的代码,复制和粘贴(不像你看起来那样键入…基于打字错误),以及
  • 完整的堆栈跟踪


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

基于您提供的有限信息,并假设它是准确的,在该点抛出
NullPointerException
的唯一可能方法是
metaData
null

所以

修改代码,在您认为正在抛出NPE的语句之前立即打印出
元数据的值
;e、 g

System.err.println("metaData is " + metaData);
如果输出显示
元数据
,那么下一步就是检查代码,找出它为什么为
。很可能您没有初始化它,或者您从其他地方传入了它,并且它在那里也是
null

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

  • 真实的代码,复制和粘贴(不像你看起来那样键入…基于打字错误),以及
  • 完整的堆栈跟踪


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

您的元数据映射是否为null?问题是某个外部类正在定义该元数据并调用该类的主方法。您的意思是在调试元数据时使用isEmpty或size方法检查它?在元数据之前检查元数据。放置(…)确定。我可以用metaData.toString完成吗?它可读吗?因为我在某个服务器上发送这个类,所以测试它需要20,30分钟。toString方法是否足够可读,或者调试元数据元素的最佳方法是什么?元数据也是在方法声明级别公共字节[]调用(映射元数据,字节[]数据)上定义的。这意味着什么:“?>metaData”是您的元数据映射空值吗?问题是某个外部类正在定义该元数据并调用该类的主方法。您的意思是在调试元数据时使用isEmpty或size方法检查它?在元数据之前检查元数据。放置(…)确定。我可以用metaData.toString完成吗?它可读吗?因为我在某个服务器上发送这个类,所以测试它需要20,30分钟。toString方法是否足够可读,或者调试元数据元素的最佳方法是什么?元数据也是在方法声明级别公共字节[]调用(映射元数据,字节[]数据)上定义的。这意味着什么:“?>元数据”谢谢Stephen…是的,它返回我元数据为空。但我是在别的班上开始的。也许其他类也在后面启动它,因为这是一个有很多默认类的IBM应用程序。有没有一种方法可以让我找出是哪个类发起的,并把它称为我的附加类?谢谢您唯一可以找到的方法是阅读代码,并通过调用追溯到
null
开始其生命的位置。元数据在方法定义中声明。所以我想从某个pl