尝试在 J2ME MIDlet 中创建线程

Posted

技术标签:

【中文标题】尝试在 J2ME MIDlet 中创建线程【英文标题】:Trying to create a Thread in 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' 可能为空。 【参考方案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");
           

【讨论】:

以上是关于尝试在 J2ME MIDlet 中创建线程的主要内容,如果未能解决你的问题,请参考以下文章

命令不在 J2me 的单独线程中工作

尝试在单独的线程中创建 IWebBrowser2 控件时未创建

如何在 J2me 中处理网络线程调用和等待进度?

在 qt 中创建另一个网络线程

在线程中创建posix共享内存

如何在不同的 QT 线程中创建一个窗口?