繁体   English   中英

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

[英]How can I know where a Null Pointer Exception originated?

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

我想知道是什么触发了这一点。 我怎么能够?

如果捕获Throwable而不是捕获Exception或Exception的任何子类,则可以查看stacktrace。 例如

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

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

人们建议这样做

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

哪个不适用于BlackBerry,您需要使用它

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

但由于它只显示异常,它不会给你发生错误的行,你将不得不在println添加其他信息。

在真实设备上,您可以通过执行以下操作访问StackTrace:

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

我在RIM网站上找到的最好的就是这份文件

好吧,我不能相信这个,但这个线程似乎给出了答案。

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

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

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

在黑莓中发现NPE创始人很容易。 例如

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

String temp = null; temp.length();

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

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

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

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

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

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

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

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

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

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

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

程序崩溃时查看堆栈跟踪 它将告诉您发生异常的位置(通常是代码行,如果可用的话)以及哪个对象为null。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM