【问题标题】:Trying to create a Thread in J2ME MIDlet尝试在 J2ME MIDlet 中创建线程
【发布时间】:2014-03-13 12:39:28
【问题描述】:

当我尝试运行一个线程时,它会给出以下错误

startApp threw an Exception
java.lang.NullPointerException
java.lang.NullPointerException
      at threadlearn.Midlet.startApp(Midlet.java:28)

MIDlet.java

public class Midlet extends MIDlet {
    ThreadClass th;

    public void startApp() {
        th.startThread();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}

class ThreadClass implements Runnable{ 
    Thread t;

    ThreadClass() {

        t = new Thread(this);
    }

    public void startThread() {
        t.start();
    }

    public void run() {
        System.out.println("We are in Thread");
    }          
}

【问题讨论】:

  • th 未初始化,为其赋值:ThreadClass th = new ThreadClass();
  • @hoaz 谢谢你的评论
  • 对于下一个错误:错误消息告诉您错误发生在文件 Midlet.java 的第 28 行的方法 Midlet.startApp 中,并且在不应该出现的情况下显示为 null 的内容。现在只需一小步就可以发现 'th' 可能为空。

标签: java multithreading java-me midlet


【解决方案1】:

正如 hoaz 所说,您需要初始化您的对象。

另外,您的 startThread() 方法是多余的。为什么不直接调用 start?

无论如何,让线程自己启动被认为是不好的做法。所以我建议重写你的代码:

public class Midlet extends MIDlet {
 ThreadClass th = null;
 Thread myThread = null;

 public void startApp() {
  if (th==null) {
   th = new ThreadClass();
   myThread = new Thread(th);
  }
  myThread.start();
 }

 public void pauseApp() {
 }

 public void destroyApp(boolean unconditional) {
 }
}

class ThreadClass implements Runnable{ 

 ThreadClass() {
 }

 public void run() {
  System.out.println("We are in Thread");
 }          
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多