gpt4 book ai didi

java - try catch block 中的空指针异常

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:22 28 4
gpt4 key购买 nike

获取以下运行时错误,导致我的应用程序在启动时崩溃

E FATAL EXCEPTION: MonitoringThread 13533 AndroidRuntime E Process: foo.com, PID: 13533 13533 AndroidRuntime E java.lang.NullPointerException 13533 AndroidRuntime E at foo.com$MonitoringThread.run(foo.java:125) 13533
AndroidRuntime E at java.lang.Thread.run(Thread.java:841)

违规行是

ret = mConnection.getInputStream().read(buffer);

在下面的代码 fragment 中

try {
ret = mConnection.getInputStream().read(buffer);
} catch (IOException e) {
break;
}

任何人都可以建议尝试调试的后续步骤吗?我认为使用 try catch block 可以消除任何空指针错误。

最佳答案

您不应该使用 try/catch block 来消除空指针异常。应该向下传递空指针异常,让程序员知道问题出现在哪里。

在您的情况下,您正在捕获 IOException,因此它不是 NullPointerException。

还要检查导致此异常的 null 是什么,也许是它的 mConnection ?或 getInputStream() 返回 null。

从这个例子也可以看出,最好不要在一行中执行很多方法:

ret = mConnection.getInputStream().read(buffer);

最好这样写:

InputStream is = mConnection.getInputStream();
ret = is.read(buffer);

这样你就可以从调用栈中知道 NPE 起源于哪里,

如果您的代码不安全,就像您知道可以从某种方法获取空指针一样,那么只需检查它:

InputStream is=null;
if ( mConnection != null ) {
is = mConnection.getInputStream();
if ( is != null ) {
ret = is.read(buffer);
}
else {
// log error?
}
}
else {
// log error?
}

关于java - try catch block 中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288433/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com