現在、NetbeansでMIDlet(Visual MIDletを使用しています)を使用していて、NullPointerExceptionがスローされていますが、その理由はわかりません。J2ME(Java) - 表示クラスでヌルポインター例外がキャッチされました
注:プログラムがエミュレータで実行されているときに例外がスローされないのは、[OKコマンド]ボタンが押されたときだけです。ここで
は、私はあなたが簡単にそれを読むことができるように、私は、例外に関係のないコードをすべて取り除かれている
TRACE: <at java.lang.NullPointerException: 0>, Exception caught in Display class
java.lang.NullPointerException: 0
at javax.microedition.lcdui.Display$ChameleonTunnel.callScreenListener(), bci=46
at com.sun.midp.chameleon.layers.SoftButtonLayer.processCommand(), bci=74
at com.sun.midp.chameleon.layers.SoftButtonLayer.soft1(), bci=37
at com.sun.midp.chameleon.layers.SoftButtonLayer.keyInput(), bci=36
at com.sun.midp.chameleon.CWindow.keyInput(), bci=38
at javax.microedition.lcdui.Display$DisplayEventConsumerImpl.handleKeyEvent(), bci=17
at com.sun.midp.lcdui.DisplayEventListener.process(), bci=277
at com.sun.midp.events.EventQueue.run(), bci=179
at java.lang.Thread.run(Thread.java:619)
を取得エラーです。 以下は、上記の例外をスローするコードがある場合の簡略化されたバージョンです。
package stMidlet;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StoryMidlet extends MIDlet implements CommandListener {
private boolean midletPaused = false;
private Command commandOk1;
private Form form1;
private TextField textField1;
public StoryMidlet() {
commandOk1 = new Command("Ok", Command.OK, 1);
textField1 = new TextField("Enter value: ", null, 120, TextField.ANY);
form1 = new Form(null, new Item[]{textField1});
form1.addCommand(commandOk1);
Display.getDisplay(this).setCurrent(form1);
}
/* There were some methods here pre-inserted by netbeans. */
/* I have not changed these, but I can post them if you need me too */
/* initialize() */
/* startMIDlet() */
/* resumeMidlet() */
/* switchDisplayable */
/* getDisplay() */
/* exitMidlet() */
/* startApp() */
/* pauseApp() */
/* destroyApp() */
public void commandAction(Command c, Displayable d) {
if (c == commandOk1)
{
System.out.println("Test");
}
}
}
ノー勝つと、少なくとも1時間のためにこれを解決しようとしています。私が言及する価値があると考えることができます 唯一のことは、次のとおりです。
- Netbeansのは、コンストラクタに漏れがあったと言って.....ラインDisplay.getDisplay(これ)との警告を示しました。私は警告を鎮静化したinitialize()メソッドに移動しましたが、例外はまだ発生します。
ご協力いただきますようお願い申し上げます。
ありがとう、トム。
1時間だけデバッグしますか?あなたはタンクにもっとたくさんあります。深刻なことに、深呼吸して数時間歩きます。あなたがSOの誰かが最初でないなら、間違いなくそれを得るでしょう。 – Mike
Display.getDisplay(this)は、 'this'がコンストラクタをエスケープしているため、リークすると言われています。しかし、コンストラクタの設定に基づいて、これはNullPointerExceptionを引き起こす可能性は低いです(すべてが既に初期化されているため) –