android初学者 问关于handler中try catch中有关问题

android菜鸟 问关于handler中try catch中问题
本帖最后由 gaoyunlong2008 于 2012-12-22 11:30:17 编辑
我建立了一个类 想在按下一个按钮后让另一个按钮循环地隐藏,显示。但是每次运行这个类就会出现异常,关闭程序,建立的类如下:
class Visclass 
{

Button btmissile;
public Visclass(Button btm)
{
this.btmissile = btm;
}


public void Vistest()
{
    final  Handler handler=new Handler(); 
    final Runnable runnable=new Runnable(){
       @Override
       public void run() 
       {  
        
        while(true)
                         {
      
        try {
       handler.wait(1000);  
       btmissile.setVisibility(Button.INVISIBLE);
       handler.wait(1000);
                                  btmissile.setVisibility(Button.VISIBLE);
    
             } 
                           catch (InterruptedException e) 
                                    {
          // TODO Auto-generated catch block
          e.printStackTrace();
                     }     
      
           }  
       };

                     handler.postDelayed(runnable, 500);


}
}
调用              Visclass vistest =new Visclass(btmissile);
              vistest.Vistest();
就会出现异常,当我不用try catch时候只是隐藏按钮就不会有问题,用那个try catch 进行延时就会有异常,求各位指教!!!

------解决方案--------------------
btmissile.setVisibility(Button.INVISIBLE);
这一行有错,这个不能在非UI线程里操作btmissile,界面的更新必须在主线程做,否则会出错。
至于你上面的代码要怎么改呢,大意如下:
重新handler的handMessage(Message msg)方法,然后在需要操作btmissile的地方,先不操作,而是直接给handler发一个消息,真正的处理在handler里做。handler的执行时在主线程里做的。如果不太明白就百度一下android handler 的用法。例子很多。
------解决方案--------------------
子线程中不能操作UI,你把Button的显示和隐藏放在handler中执行,通过handlerMessage执行,它是在主线程中操作UI的,你可以把延时放在子线程中,每隔100ms子线程给handler发个消息就行了。给分啊!
------解决方案--------------------