J2ME(Java)-在显示类中捕获空指针异常

J2ME(Java)-在显示类中捕获空指针异常,java,multithreading,java-me,nullpointerexception,lcdui,Java,Multithreading,Java Me,Nullpointerexception,Lcdui,我目前正在使用Netbeans中的MIDlet(我使用的是一个可视化MIDlet),并且抛出了一个NullPointerException,但我不知道为什么 注意:当程序在模拟器上运行时,仅当按下OK命令按钮时,才会引发异常 这是我得到的错误 TRACE: <at java.lang.NullPointerException: 0>, Exception caught in Display class java.lang.NullPointerException: 0

我目前正在使用Netbeans中的MIDlet(我使用的是一个可视化MIDlet),并且抛出了一个NullPointerException,但我不知道为什么

注意:当程序在模拟器上运行时,仅当按下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)
}

我已经尝试解决这个问题至少一个小时了,但没有成功。 我能想到的唯一值得一提的是:

  • Netbeans显示了一条警告,行Display.getDisplay(this)…表示构造函数中存在漏洞。我将其移动到initialize()方法中,该方法消除了警告,但异常仍然发生
任何帮助都将不胜感激


谢谢你,汤姆。

编辑:我可能需要修改我的答案,因为我认为我所说的不相关,但我会保留它,因为它可能会有所帮助

我已经很久没有在J2ME中工作了,但是看过一些旧代码后,我发现我从来没有在构造函数中做过任何有用的事情。我打赌您调用Display.getDisplay(此)会导致NullPtrException,因为某些内容尚未初始化。事实上,我很确定在构造函数中使用this指针肯定会导致这种类型的错误

尝试在startApp()函数中处理Display,如果我所指的代码是正确的,那么应该保留一个布尔值,用于标记MIDlet是否已初始化

您可以在这里查看我的一些旧代码以供参考:

也许您需要添加

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);
并且总是得到空指针异常。。。这很有效,但当代码变得太复杂时,我们似乎经常忘记它^^

您必须按顺序执行:

  • form1.setCommandListener
  • 表单1.addCommand
  • 毕竟:
    MIDlet.getDisplay.setCurrent(form1)

如果在添加命令和侦听器之前调用“setCurrent”,form1屏幕仍会出现,但当您点击命令时,会出现上述错误。

仅调试一小时?你的油箱里还有。认真地说,深呼吸,然后离开几个小时。如果SO上的某个用户没有首先泄漏.Display.getDisplay(this),那么您肯定会得到它,因为'this'正在逃逸构造函数。但是,根据您的构造函数设置,这不太可能导致NullPointerEXception(因为所有内容都已初始化)
this.setCommandListener(this);