我在诺基亚 S40 中收到 NullPointerException。
我想知道是什么导致了这个异常。
设备显示:
NullPointerException java/lang/NullPointerException
此错误仅发生在设备中,在模拟器中运行应用程序工作正常。
我使用microlog来调试我的应用程序。但是如果启用了日志,应用程序可以正常工作。
当我得到这个 NullPointerException 时,有没有办法获取堆栈跟踪?我不需要像行号这样的所有细节,只是哪个方法导致了这个异常。
更新:我在另一台诺基亚 S40 上安装了相同的应用程序,但没有出现相同的错误。
- 诺基亚 2660 - 错误
- 诺基亚 6131 - 没有错误
更新 2:不知何故,我找到了导致 NullPointerException 的原因。
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
public class OuterClass extends Canvas {
private Config config;
public OuterClass() {
this.config = new Config();
}
public void paint(Graphics graphics) {
HelperClass helper = new HelperClass(this.config);
helper.doStuff();
}
public void dispose() {
this.config = null;
}
public class Config implements IConfig {
public int getSomething() {
// ...
}
}
}
public class HelperClass {
private IConfig config;
public HelperClass(IConfig) {
this.config = config;
}
public doStuff() {
config.getSomething(); // Here is thrown NullPointerException
}
}
在某些情况下,会启动一个线程并在导致 NPE 的 helper.doStuff() 之前调用 OuterClass.dispose()。我认为当我启用日志时,它会使线程变慢,并且在我期望它被调用时调用了 helper.doStuff()。