2017-01-06 9 views
0

ハンドラを使用して、自分のプロセスがUIスレッドでProgressBarを更新しましたが、このようなエラーが発生します。
nullオブジェクト参照の.Handler.sendMessage(android.os.Message「)
pleseは私のコードアンドロイドハンドラがヌルオブジェクト参照エラーを返しました

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

ThreadMyThreadという独自の実装があります。 この実装では、グローバル変数handlerの参照を使用しています。

問題は次のとおりです。handler変数をインテリジェント化する前にMyThreadをインスタンス化しようとしています。 だから、handlerあなたはソリューションが静かに簡単ですthread.start()

を呼び出すときnullです:うあなたはhandler=new Handler()前に、新しいスレッドを開始しているのでHandler

+0

スーパーブロー、本当にいいです。わかった。おかげで – sreeku24

0

を初期化した後、あなたのスレッドを起動する必要があり

handler最初は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

ありがとうbro.Yes正しい – sreeku24

関連する問題