2014-03-13 9 views
0

난 당신이 필요 hoaz가 말한대로 오류는 J2ME 미들 릿에서 스레드를 만들려고

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

오류 : 오류 메시지는 Midlet.java 파일의 Midlet.startApp 메소드에서 28 번째 줄에 오류가 발생했음을 나타내며 그렇지 않을 경우 null에 해당하는 내용을 표시합니다. 이제는 'th'가 아마도 null이라는 것을 알아내는 작은 단계입니다. –

+0

주셔서 감사합니다 @hoaz' – 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"); 
}   
}