2012-11-23 89 views
0

运行此代码时出现错误,每当我在睡眠方法上设置时间时出现错误并且它关闭应用程序。当我尝试设置ImageView时线程睡眠错误

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(); 

我该如何解决?

+2

什么是LogCat错误堆栈? – MrWaqasAhmed

+0

你永远不应该睡在UI线程上,事实上,睡眠几乎总是很糟糕。你想做什么? – Simon

回答

0

你不能从一个非UI线程访问UI,你可以使用处理程序完成相同的操作..

new Handler().postDelayed(new Runnable(){ 
     @Override 
     public void run() { 
      im.setImageResource(R.drawable.primeiro_misterio_gozoso07); 
     } 
    }, 5000); 
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(); 
0

您无法从后台线程接受UI。你只能通过MainThread来完成。一个解决办法是

// SLEEP 5 SECONDS HERE ... 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
       // do your work here 
     } 
    }, 5000);