【发布时间】:2010-04-15 11:30:57
【问题描述】:
我在制作 Blackberry 应用程序时遇到问题。我找到了一些人,他做了一个教程,做了我尝试过的事情。我复制了教程应用程序的代码来尝试重新创建它,只是为了看看它的实际效果。结果:空指针异常。
我想知道是什么触发了这个。我该怎么办?
【问题讨论】:
标签: java blackberry nullpointerexception
我在制作 Blackberry 应用程序时遇到问题。我找到了一些人,他做了一个教程,做了我尝试过的事情。我复制了教程应用程序的代码来尝试重新创建它,只是为了看看它的实际效果。结果:空指针异常。
我想知道是什么触发了这个。我该怎么办?
【问题讨论】:
标签: java blackberry nullpointerexception
如果您捕获 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.
}
【讨论】:
黑莓中没有堆栈跟踪,最好是使用Debug模式,这样当异常发生时应用程序会break。
人们建议这样做
try {
// Code that throws an exception
} catch (Exception e) {
e.printStackTrace();
}
这在 BlackBerry 上不起作用,您需要改用它
System.out.println(e.getMessage());
但由于它只显示异常,它不会告诉你发生错误的行,你必须在println中添加其他信息。
在真实设备上,您可以通过 this 访问 StackTrace:
转到主屏幕并输入后门序列 LGLG。然后过滤日志并找到异常条目。然后,您可以复制并通过电子邮件发送跟踪。
我在 RIM 网站上能找到的最好的就是 document。
【讨论】:
好吧,我不能把这归功于这个,但这个帖子似乎给出了答案。
更改您的 catch 块以捕获 Throwable 而不是特定的异常。这将保留堆栈跟踪并将其添加到事件日志中。
另外,请尝试在黑莓智能手机模拟器上运行您的应用程序,而不是在您的真手机上运行,因为黑莓在其文档中指出您可以调用 printStackTrace 函数。
【讨论】:
在黑莓中查找 NPE 发起者很容易。 例如
1.在任何地方插入此代码。
字符串临时=空; temp.length();
【讨论】:
您应该能够查看异常的堆栈跟踪。
您可以将其打印到控制台,执行如下操作:
try {
// Code that throws an exception
} catch (Exception e) {
e.printStackTrace();
}
注意:这绝不应该出现在生产代码中!
【讨论】:
System.out.println(e.getMessage());
程序崩溃时查看stack trace。它会告诉您异常源自何处(通常是哪一行代码,如果可用)以及哪个对象为空。
如果您没有看到堆栈跟踪,请用 OMG Unicorns suggests 包围您的 main 方法中的所有内容。
【讨论】:
我不知道黑莓,但一般来说,异常都有一个堆栈跟踪,其中显示了行号:
java.lang.NullPointerException
at your.packege.ClassName.methodName(ClassName.java:169)
所以获取堆栈跟踪并查看。堆栈跟踪是通过
获得的try {..} catch (Exception ex) {..}
或者让它冒泡到打印到标准输出的地方。
此外,每个异常都有getStackTrace() 方法,它将堆栈跟踪的每一行作为StackTraceElement 返回
【讨论】: