0

このコードを実行するとエラーが発生します。スリープメソッドに時間を設定するたびにエラーが発生し、アプリケーションが閉じます。

im = (ImageView) findViewById(R.id.imag1);

    Thread t = new Thread() {
        public void run() {
            try {
                sleep(5000);

            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {

                im.setImageResource(R.drawable.primeiro_misterio_gozoso07);
            }
        }
    };
    t.start();

どうすれば修正できますか?

4

3 に答える 3

0

彼のビューに触れたり変更したりできる唯一のスレッドはUIスレッド(MainThread)ですが、代わりに次のCountDownTimerように使用できます。

CountDownTimer timer = new CountDownTimer(1000,5000) 
 {
      @Override
       public void onTick(long l){}

       @Override
       public void onFinish(){
          im.setImageResource(R.drawable.primeiro_misterio_gozoso07);
       };
 }.start();
于 2012-11-23T14:17:46.700 に答える
0

UI以外のスレッドからUIにアクセスすることはできません。ハンドラーを使用して、同じことを実行できます。

new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
            im.setImageResource(R.drawable.primeiro_misterio_gozoso07);
        }
    }, 5000);
于 2012-11-23T14:18:27.183 に答える
0

バックグラウンドスレッドからUIにアクセスすることはできません。MainThreadを介してのみ実行できます。1つの回避策は

// SLEEP 5 SECONDS HERE ...
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
         public void run() { 
              // do your work here
         } 
    }, 5000); 
于 2012-11-23T14:20:12.817 に答える