[英]J2ME (Java) - Null Pointer Exception caught in Display Class
我目前正在使用Netbeans中的MIDlets(我使用的是Visual MIDlet),並且正在拋出NullPointerException,但我不知道為什么。
注意:只有在按下“確定命令”按鈕時,程序在模擬器上運行時才會拋出異常。
這是我得到的錯誤
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");
}
}
}
我一直試圖解決這個問題至少一個小時,沒有任何優勢。 我能想到的唯一值得一提的是:
任何幫助將不勝感激。
謝謝,湯姆。
編輯:我可能需要編寫我的答案,因為我認為我所說的是不相關的,但我會留下它可能有所幫助的機會!
自從我在J2ME工作已經很長時間了,但是看了一些舊的代碼,我注意到我從未在構造函數中做過任何有用的事情。 我打賭你對Display.getDisplay(this)的調用導致了NullPtrException,因為還沒有初始化。 事實上,我很確定在構造函數中使用this指針肯定會導致這種類型的錯誤。
嘗試在startApp()函數中處理Display,如果我所指的代碼是正確的,你應該保留一個布爾值來標記你的MIDlet是否已初始化。
您可以在這里查看我的一些舊代碼以供參考:
http://code.google.com/p/jmingle/source/browse/trunk/src/org/oep/jmingle/JMingle.java#68
也許你需要補充一下
form1.setCommandListener(本);
我也注意到了......
public Welcome(String k, ChatApp c) {
super(k);
name = new TextField("Name", "", 140, TextField.ANY);
exit = new Command("Exit", Command.EXIT, 0);
enter = new Command("Enter", Command.OK, 0);
midlet = c;
this.append(name);
this.addCommand(exit);
this.addCommand(enter);
}
缺乏了
this.setCommandListener(this);
並且總是得到空指針異常...這很好用,但是當我們的代碼變得過於復雜時,我們似乎經常忘記它^^
你必須按順序做:
MIDlet.getDisplay.setCurrent(form1);
如果在添加命令和監聽器之前調用'setCurrent',則仍然會出現form1屏幕,但是當您點擊命令時,它會引發錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.