Pra*_*ham 26 java null android bluetooth ioexception
我很困惑它自己的android问题或Java问题.
当我调试一个与蓝牙一起工作的android应用程序时,流程停在了一个catch块上IOException,后来我发现异常e为null ....当我试图从InputStream读取时抛出它
是的,它不是一个NullPointerException但是其他类型的异常是空的 - 更好的说抛出未初始化.
可能吗?在哪种情况下可以抛出这种单元化异常?

Ste*_*n C 17
可能吗?在哪种情况下可以抛出这种单元化异常?
使用符合条件的Java编译器和符合标准的Java虚拟机,以及通过扩展符合Davlik虚拟机,这是不可能的.JLS不允许e变量null位于该位置
要么你有一个有缺陷的虚拟机,一个有缺陷的调试器,或者你的IDE,构建工具和/或进程有问题.
如果我遇到你的情况,我现在就停止使用调试器,然后再向你的代码添加老式的跟踪图.并确保您从源代码执行干净且完整的构建.
您应该考虑的另一种可能性是JRE在运行时报告的行号(以及调试器所依赖的行号)没有与源代码中的行号对齐.如果您在构建和部署过程中犯了错误,就可能发生这种情况.错误可能是忘记保存文件,忘记构建,忘记部署新版本的应用程序或让IDE与文件系统不同步.
FWIW,理论上认为这是由throw null;相当于或不等的水引起的.该JLS节14.18说:
"如果表达式的评估正常完成,产生一个空值,则创建类NullPointerException的实例V'并抛出而不是null."
如果你在其上下文中阅读该句子,则更容易理解,但它清楚地说明throw null;实际上会抛出一个句子NullPointerException.
UPDATE
我在这个SO问题中找到了另一个似是而非的解释:Exception总是为NULL
基本上,它表示模拟代码抛出Eclipse不知道的异常,并且Eclipse模拟器"有帮助"替换a null.这听起来像是一个模拟器错误.
您可能被调试器愚弄了。
在该行下添加另一行代码(像 之类的无用代码if(false) log.v("","");),在此处中断,然后从那里检查异常的值。
也尝试Log.e(TAG, "my null exception", e);并阅读日志。
| 归档时间: |
|
| 查看次数: |
5494 次 |
| 最近记录: |