我编写了以下 Java 应用程序
:
import java.util.Timer;
import java.util.TimerTask;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;
public class JavaApplication6 extends MIDlet
{
private static Form clockForm=null;
private static StringItem clockItem=new StringItem("hello", "World!");
private static ClockTask task=null;
private static Timer timer=null;
static class ClockTask extends TimerTask
{
private int count=0;
@Override
public void run()
{
count++;
clockItem.setText("hello "+count);
}
}
public static void JavaApplication6() throws Exception
{
clockForm=new Form("Clock");
clockItem=new StringItem("","0");
clockForm.append(clockItem);
}
@Override
public void startApp()
{
task=new ClockTask();
timer=new Timer();
timer.schedule(task,1000,1000);
Display.getDisplay(this).setCurrent(clockForm);}
@Override
public void pauseApp()
{}
public void destroyApp(boolean unconditional)
{}
public static void main(String[] args) {
JavaApplication6 test=new JavaApplication6();
test.startApp();
}
}
但是当我运行它时,它在 startApp()
的最后一行给我以下 exception
;
Exception in thread "main" java.lang.NullPointerException
at javax.microedition.lcdui.Display.<init>(Display.java:420)
at javax.microedition.lcdui.Display.getDisplay(Display.java:447)
at javaapplication6.JavaApplication6.startApp(JavaApplication6.java:42)
at javaapplication6.JavaApplication6.main(JavaApplication6.java:56)
最佳答案
您创建了名为 JavaApplication6
的静态方法,因为它是构造函数。但事实并非如此。因此,当您说 JavaApplication6 test=new JavaApplication6();
时,它不会被调用。因此 clockForm
保持未初始化状态,即 null
。所以,行
Display.getDisplay(this).setCurrent(clockForm);
抛出 NPE,因为此时 clockForm
为 null
。
解决方案是从 public static void JavaApplication6() throws Exception
行中删除 static void
。它应该看起来像
public JavaApplication6() 抛出异常
在这种情况下,它成为构造函数,一切都会正常工作。
祝你好运。
关于java - MIDLet 中的 nullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10569761/