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 线程访问 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 来做。一种解决方法是

// 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 回答
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 回答