android初学者 问关于handler中try catch中有关问题
android菜鸟 问关于handler中try catch中问题
我建立了一个类 想在按下一个按钮后让另一个按钮循环地隐藏,显示。但是每次运行这个类就会出现异常,关闭程序,建立的类如下:
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发个消息就行了。给分啊!
------解决方案--------------------
我建立了一个类 想在按下一个按钮后让另一个按钮循环地隐藏,显示。但是每次运行这个类就会出现异常,关闭程序,建立的类如下:
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发个消息就行了。给分啊!
------解决方案--------------------