我怎么知道Null指针异常的起源?

时间:2010-04-13 17:21:18

标签: java blackberry nullpointerexception

我在制作Blackberry应用时遇到了问题。我找到了一个人,他做了一个教程,做了我尝试过的事情。我复制了教程应用程序的代码,试图重新创建它,只是为了看它的实际效果。结果:空指针异常。

我想知道是什么触发了这个。我怎么能?

7 个答案:

答案 0 :(得分:3)

如果捕获Throwable而不是捕获Exception或Exception的任何子类,则可以查看堆栈跟踪。 e.g。

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.  
}

答案 1 :(得分:2)

BlackBerry中没有堆栈跟踪,最好使用调试模式,因此当异常发生时应用程序将break

人们建议这个

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

哪些无法在BlackBerry上运行,您需要使用此代替

System.out.println(e.getMessage());

但由于它只显示异常,因此不会显示发生错误的行,您必须在println中添加其他信息。

在真实设备上,您可以通过this

访问StackTrace

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

我在RIM网站上找到的最好的是document

答案 2 :(得分:2)

好的,我不能相信这一点,但这个主题似乎给出了答案。

更改catch块以捕获Throwable而不是特定的Exception。这将保持堆栈跟踪并将其添加到事件日志中。

http://supportforums.blackberry.com/t5/Java-Development/How-to-get-stacktrace-from-a-real-device/m-p/27668

此外,尝试在黑莓智能手机模拟器上运行您的应用程序而不是真正的手机,因为黑莓在他们的文档中指出您可以调用printStackTrace函数。

答案 3 :(得分:0)

在黑莓中发现NPE创始人很容易。 e.g。

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

String temp = null; temp.length();

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

答案 4 :(得分:-1)

我不知道黑莓,但通常情况下,例外有一个堆栈跟踪,其中显示了行号:

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

所以获取堆栈跟踪并查看。堆栈跟踪是通过

获得的
try {..} catch (Exception ex) {..}

或让它冒泡到打印到标准输出的地方。

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

答案 5 :(得分:-1)

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

您可以将此打印到控制台,执行以下操作:

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

注意:这绝不会出现在生产代码中!

答案 6 :(得分:-1)

程序崩溃时查看stack trace。它会告诉你发生异常的位置(通常是代码行,如果可用的话)以及哪个对象为null。

如果您没有看到堆栈跟踪,请使用OMG Unicorns suggests包围主方法中的所有内容。