首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2013-01-11 
android菜鸟 问关于handler中try catch中问题本帖最后由 gaoyunlong2008 于 2012-12-22 11:30:17 编辑我建

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发个消息就行了。给分啊!
------解决方案--------------------


handleMessage(Message msg)写法如下 :
 Handler hand = new Handler() {
            public void handleMessage(Message msg) {

                 
                super.handleMessage(msg); 
             };
         };


热点排行