很久以前,我从我的前同事那里获得了代码,但是我无法使其工作。
使用调试器我得出结论,我的课程在这个方法上有突破点:
((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专家,所以我真的需要帮助。
答案 0 :(得分:3)
根据您提供的有限信息,并假设它是准确的, 1 唯一可能的方式是NullPointerException
可以抛出那个metaData
}是null
。
所以......
修改您的代码,以便在您认为正在抛出NPE的语句之前立即打印出metaData
的值; e.g。
System.err.println("metaData is " + metaData);
如果输出显示metaData
为null
,则下一步是检查您的代码以确定原因它是null
。您可能没有初始化它,或者您已经从其他地方传递了它,它也是null
。
如果输出显示metaData
不是null
,那么您在问题中陈述的事实/假设之一必须是错误的。为了进一步诊断,我们需要:
1 - 对于某些类型的Map
,如果密钥为null
,您还可以获得NPE。但是,该异常将在put()
方法调用中抛出。此外,当您使用文字字符串作为键时,您说您遇到了同样的问题。所以这不能解释。唯一可能的解释是,有多个线程在没有同步的情况下更新地图。这可能是NPE(随机),但NPE将在put
或Map
实例的其他方法中。
答案 1 :(得分:1)
如果您要放入地图的数据不是null,则在放入之前,您的地图可能为空,并且您会收到NullPointerException。
OR 在其他任何地方抛出异常。