我该如何知道空指针异常的来源?

4

我在制作黑莓应用程序时遇到了问题。我找到了一个做了与我尝试的相同操作的教程作者。我复制了教程应用程序的代码来重新创建它,只是为了看到它的运行情况。结果:空指针异常。

我想知道是什么触发了这个异常。我该怎么办?


请参考以下类似问题:https://dev59.com/1nE95IYBdhLWcg3wMrEB - Martin
7个回答

4

如果您捕获Throwable而不是捕获Exception或任何Exception子类,则可以查看堆栈跟踪。 例如:

try
{
   //some code
}
catch(Throwable t)
{
    //Will automatically show a stacktrace in eclipse.  
    //I believe on a real device it will put the stacktrace in the eventlog.  
}

2

在黑莓设备中没有堆栈跟踪,最好的方法是使用调试模式,这样当异常发生时应用程序将会中断

有人建议这样做。

try {
    // Code that throws an exception
} catch (Exception e) {
    e.printStackTrace();
}

这将无法在黑莓上运行,您需要使用这个替代方案。
System.out.println(e.getMessage());

但是由于它只显示异常,所以它不会给出错误发生的代码行,您需要在println中添加其他信息。

在实际设备上,您可以通过执行此操作来获取堆栈跟踪:

进入主屏幕并输入后门序列 LGLG。然后,您可以通过日志进行筛选,找到异常条目。然后,您可以通过电子邮件复制并发送跟踪信息。

我在RIM网站上找到的最好的资料是这个文档


+1. 为什么BB上没有堆栈跟踪?它们只是不受BB Jvm支持吗? - pajton
@pajton 我希望我知道这个问题的答案 :P - Michael B.
好的,这是Java对吧?所以你也可以在PC上运行你的应用程序。这个bug是否可重复?希望这能给你提供一些线索,因为Michael说没有堆栈跟踪,但PC有。 - hookenz
@Matt H如果你知道如何在PC上运行BlackBerry代码,请告诉我。 - Michael B.
你尝试在黑莓智能手机模拟器上打印堆栈跟踪了吗?他们的文档似乎表明printStackTrace可以工作。 - hookenz

2

0

在黑莓中查找NPE起源很容易。 例如:

1. 在任何地方插入此代码。

String temp = null; temp.length();

  1. 从eclipse以调试模式启动模拟器。
  2. 当您到达此代码时,eclipse会自动暂停代码的执行,并将temp.length();此行突出显示为绿色。
  3. 在调试窗口中,您可以看到挂起的异常空指针异常。

-1

我不了解黑莓,但通常情况下,异常会有一个堆栈跟踪,其中显示了行号:

java.lang.NullPointerException
    at your.packege.ClassName.methodName(ClassName.java:169)

所以获取堆栈跟踪并查看。堆栈跟踪是通过以下方式获取的

try {..} catch (Exception ex) {..}

或者通过让它冒泡到打印到标准输出的位置。

此外,每个异常都有一个getStackTrace()方法,它将堆栈跟踪的每一行作为StackTraceElement返回。


在BlackBerry上没有StackTrace,因此不会显示。 - Michael B.

-1

你应该能够查看异常的堆栈跟踪。

你可以通过类似以下方式将其打印到控制台:

try {
    // Code that throws an exception
} catch (Exception e) {
    e.printStackTrace();
}

注意:这段代码绝对不应该出现在生产环境中!

重点是,堆栈跟踪不仅在黑莓上打印。我也正在为黑莓开发,并想知道如何将它们打印出来。相反,您得到的只是打印“无堆栈跟踪”。 - pajton
这样行不通,你需要使用 System.out.println(e.getMessage()); - Michael B.
当然可以,但那样我只会得到一条信息而不是堆栈跟踪。你知道如何打印出堆栈跟踪吗?好的,我看到你已经发了一个答案,谢谢。 - pajton

-1
当程序崩溃时,请查看堆栈跟踪。它会告诉您异常的起源位置(通常还包括可用的代码行)以及哪个对象为空。
如果未看到堆栈跟踪,请使用OMG Unicorns建议中提到的方法将主要方法中的所有内容全部包裹起来。

黑莓设备上没有堆栈跟踪,因此这将永远不会显示。 - Michael B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接