【发布时间】:2012-09-11 23:18:33
【问题描述】:
我已经盯着这个短代码太久了,我一辈子都看不到它如何在第 6 行抛出 NullPointerException。为什么是 NPE?
class ConvertTest {
public static void main(String[] args) throws Exception {
byte[] b = "Ha".getBytes("UTF-8");
System.out.println("bytes: " + b.length);
javax.xml.bind.DatatypeConverter.printBase64Binary(b); // NPE!
}
}
输出
bytes: 2
Exception in thread "main" java.lang.NullPointerException
at javax.xml.bind.DatatypeConverter.printBase64Binary(DatatypeConverter.java:547)
at ConvertTest.main(ConvertTest.java:6)
Press any key to continue . . .
更新
虽然许多错误报告都指向 1.7 版本,但我惊讶地发现 Eclipse 被配置为使用 1.6.0_32 并且 TextPad 找到了 1.6.0-b105 的版本(甚至没有意识到它已安装! )。
两个 JRE 都因该 NPE 而失败。
【问题讨论】:
-
哇!安德鲁汤普森在问一个问题:D
-
我没有收到任何 NPE。输出字节数:2. 在 Netbeans 中运行完全相同的代码。
-
@Eng.Fouad 你不认为我建立了 50K 代表。你一无所有?我用它作为我的问题的赏金。 ;)
-
会不会和this有关?
-
查看 jdk 源代码,DatatypeConverter 使用内部 impl。这个 impl 为 null 是唯一可能导致 NPE 的事情。这似乎与@RoddyoftheFrozenPeas 的建议一致,即该问题与混淆/冲突的 jaxb 库有关。
标签: java string nullpointerexception base64 type-conversion