Java:异常本身为空
我很困惑。这是安卓系统的问题还是Java本身的问题 当我调试一个使用蓝牙的Android应用程序时,流在Java:异常本身为空,java,android,null,bluetooth,ioexception,Java,Android,Null,Bluetooth,Ioexception,我很困惑。这是安卓系统的问题还是Java本身的问题 当我调试一个使用蓝牙的Android应用程序时,流在IOException的catch块上停止,我后来发现异常e为空。。。。它是在我试图从输入流读取时抛出的 是的,它不是一个NullPointerException,而是另一种类型的null异常——最好说是未初始化抛出的 可能吗?在哪种情况下可以抛出这样的单元化异常 在Java中,您可以通过抛出null来抛出NullPointerException。在这种情况下,可丢弃的最终将是NullPoin
IOException
的catch块上停止,我后来发现异常e为空。。。。它是在我试图从输入流读取时抛出的
是的,它不是一个NullPointerException
,而是另一种类型的null异常——最好说是未初始化抛出的
可能吗?在哪种情况下可以抛出这样的单元化异常
在Java中,您可以通过抛出
null
来抛出NullPointerException
。在这种情况下,可丢弃的最终将是NullPointerException
public static void main(String[] args)
{
try
{
a(null);
}
catch(Exception e)
{
System.out.println(e);
e.printStackTrace();
}
}
public static void a(String[] args)
{
throw null;
}
输出:
java.lang.NullPointerException
java.lang.NullPointerException
at scjp.Scjp.a(Scjp.java:18)
at scjp.Scjp.main(Scjp.java:8)
你可能被调试器愚弄了 在该行下添加另一行代码(类似于
if(false)log.v(“,”);
),在那里中断,然后从那里检查异常的值
还可以尝试Log.e(标记“MyNullException”,e)代码>,然后读取日志
可能吗?在哪种情况下可以抛出这样的单元化异常
使用一致性Java编译器和一致性Java虚拟机以及扩展一致性虚拟机是不可能的。JLS不允许e
变量在该位置为null
要么是虚拟机有问题,要么是调试器有问题,要么是IDE、构建工具和/或流程有问题
如果我是你的情况,我会暂时停止使用调试器,转而向代码中添加老式的TracePrint。并确保从源代码进行干净完整的构建
您应该考虑的另一种可能性是,JRE在运行时报告的行号(以及调试器依赖)没有与源代码中的行号对齐。如果您在构建和部署过程中犯了错误,可能会发生这种情况。错误可能是忘记保存文件、忘记构建、忘记部署应用程序的新版本或使IDE与文件系统不同步
值得一提的是,该理论认为这是由throw null引起的代码>或类似的东西是站不住脚的。报告说:
如果表达式的求值正常完成,生成空值,则创建并抛出NullPointerException类的实例V',而不是null
如果你在上下文中阅读这个句子会更容易理解,但它清楚地表明,抛出null
实际抛出一个NullPointerException
public static void main(String[] args)
{
try
{
a(null);
}
catch(Exception e)
{
System.out.println(e);
e.printStackTrace();
}
}
public static void a(String[] args)
{
throw null;
}
更新
我在这个问题中找到了另一个似是而非的解释:
基本上,它是说模拟代码抛出了一个Eclipse不知道的异常,而Eclipse仿真器“有益地”替换了一个null
。这听起来像是一个模拟器错误。。添加代码示例引发异常。它只是一个BluetoothInputStream.read()调用,已连接设备。。。但如果有人感兴趣的话,我想用一张快照作为证据……@Dimme作为一个例外???或者我在IOException捕获块上捕获这个空抛出,因为它是第一个写入的????有可能吗???我以前见过调试器被过时的代码愚弄。尝试清理项目,然后再试一次?请参阅我发布的屏幕截图。。。。。我想现在你必须在看到答案后改变答案……:)他得到的错误不是nullpointerexception,但异常本身是nullLog,应该打印一些关于该可丢弃的内容,但可能该可丢弃的是null。。。。它只打印“我的null异常”“被调试器愚弄”并不一定局限于误报-调试器可能会损坏程序流或状态,而不仅仅是误报它。