NokiaS40でNullPointerExceptionが発生します。
この例外の原因を知りたいのですが。
デバイスは次のことを示しています。
NullPointerException java / lang / NullPointerException
このエラーはデバイスでのみ発生し、エミュレータで実行するとアプリケーションは正常に動作します。
micrologを使用してアプリケーションをデバッグします。ただし、ログが有効になっている場合、アプリケーションは正常に動作します。
このNullPointerExceptionを取得したときにスタックトレースを取得する方法はありますか?この例外の原因となる行番号など、すべての詳細は必要ありません。
更新:同じアプリケーションを別のNokia S40にインストールしましたが、同じエラーは発生しませんでした。
- Nokia2660-エラー
- Nokia6131-エラーなし
更新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
}
}
状況によっては、スレッドが開始され、helper.doStuff()がNPEを引き起こす前にOuterClass.dispose()を呼び出します。ログを有効にすると、スレッドが遅くなり、呼び出されると予想したときにhelper.doStuff()が呼び出されたと思います。