2014-03-13 54 views
0

當我嘗試作爲hoaz說來運行一個線程,然後它給下面的錯誤試圖在J2ME的MIDlet創建一個線程

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"); 
    }   
} 
+3

'th'沒有初始化,一些值分配給它:'ThreadClass日=新ThreadClass();' – hoaz

+0

@hoaz感謝您發表評論 –

+0

在接下來的錯誤:錯誤消息告訴你,錯誤發生在第28行的Midlet.java文件中的Midlet.startApp方法中,並且該錯誤消息告訴你應該不是null。現在找出'th'可能爲空是一小步。 – Meier

回答

0

,你需要初始化你的對象。

此外,您的startThread()方法是多餘的。爲什麼不直接致電開始?

無論如何,讓線程自行啓動被認爲是不好的做法。所以我提出這個重寫你的代碼:

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"); 
}   
}