2017-01-06 2 views
0

내 프로세스가 Handler를 사용하여 UI 스레드에서 ProgressBar로 업데이트됩니다.하지만 이렇게하면 오류가 발생합니다.
null 객체 참조
Plese에 .Handler.sendMessage (android.os.Message)이 '내 코드 확인android Handler가 null 객체 참조 오류를 발생시킵니다.

public class MainActivity extends AppCompatActivity { 
 
    Handler handler; 
 
    Thread thread; 
 
    ProgressBar prb; 
 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     prb=(ProgressBar) findViewById(R.id.progress); 
 
     thread=new Thread(new MyThread()); 
 
     thread.start(); 
 
     handler=new Handler(){ 
 
      @Override 
 
      public void handleMessage(Message msg) { 
 
       prb.setProgress(msg.arg1); 
 
      } 
 
     }; 
 
    } 
 

 

 
    class MyThread implements Runnable{ 
 

 
     @Override 
 
     public void run() { 
 
      for (int i=1;i<10;i++) { 
 
       Message message = Message.obtain(); 
 
       message.arg1=i; 
 
       handler.sendMessage(message); 
 
       try { 
 
        thread.sleep(10); 
 
       } catch (InterruptedException e) { 
 
        e.printStackTrace(); 
 
       } 
 
      } 
 
     } 
 
    } 
 
}

그것은 명확하게 오류가 형태가 여기에,

것을 보여

handler.sendMessage (message);

답변

1

코드에는 MyThread이라는 코드로 Thread을 구현했습니다. 이 구현에서는 전역 변수 handler에 대한 참조를 사용하고 있습니다.

문제는 다음과 같습니다. 변수를 확인하기 전에 MyThread을 인스턴스화하려고합니다. 당신이 handler=new Handler() 전에 handler 것 새로운 스레드를 시작하고 있기 때문에 당신은 Handler

+0

슈퍼 형, 정말 좋네요. 알았다. 감사합니다 – sreeku24

0

를 초기화 한 후 스레드를 시작해야

: 그래서 handler 당신이 솔루션은 조용하고 간단 thread.start()

를 호출 할 때 null입니다 처음에는 null이된다. 변경시이 항목

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    prb=(ProgressBar) findViewById(R.id.progress); 

    // moved handler initialization 
    handler=new Handler(){ 
     @Override 
     public void handleMessage(Message msg) { 
      prb.setProgress(msg.arg1); 
     } 
    }; 


    thread=new Thread(new MyThread()); 
    thread.start(); 
} 
+0

감사합니다. 예, 맞습니다. – sreeku24

관련 문제