android菜鸟 问关于handler中try catch中问题 本帖最后由 gaoyunlong2008 于 2012-12-22 11:30:17 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 btmissile.setVisibility(Button.INVISIBLE);这一行有错,这个不能在非UI线程里操作btmissile,界面的更新必须在主线程做,否则会出错。至于你上面的代码要怎么改呢,大意如下:重新handler的handMessage(Message msg)方法,然后在需要操作btmissile的地方,先不操作,而是直接给handler发一个消息,真正的处理在handler里做。handler的执行时在主线程里做的。如果不太明白就百度一下android handler 的用法。例子很多。 子线程中不能操作UI,你把Button的显示和隐藏放在handler中执行,通过handlerMessage执行,它是在主线程中操作UI的,你可以把延时放在子线程中,每隔100ms子线程给handler发个消息就行了。给分啊! 我几乎不会java 能帮我简单写下handMessage(Message msg)吗?怎么调用它呢 多谢了 handleMessage(Message msg)写法如下 : Handler hand = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); }; }; class Visclass { Button btmissile; public Visclass(Button btm) { this.btmissile = btm; } static int flag; public void Vistest() { final Handler handler=new Handler() { @Override public void handleMessage(Message msg) { int i=0; i=msg.arg1; ViewGroup.LayoutParams mp = new AbsoluteLayout.LayoutParams( 30, 60, 200, 340-(i*20) ); btmissile.setLayoutParams(mp); super.handleMessage(msg); } };//handler定义 final Runnable runnable=new Runnable() { @Override public void run() { flag=1; for(int t=0;t<5;t++) { try { Message msg=handler.obtainMessage(); msg.arg1=flag; handler.sendMessage(msg); Thread.sleep(1000); flag++; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; //runnable定义 handler.postDelayed(runnable, 0); }}修改之后 为什么 不是一步一步地显示 只是延时之后显示走到了最后的位置??? 在handlermessage 里加了btmissile.invalidate();也还是不能一步一步显示 你在子线程了每隔一段时间 用handler发一次消息 接受之后再进行处理你要做的动作 就可以实现了 修改之后可以延时运行的代码,谢谢各位了class Shootclass { Button btmissile; public Shootclass(Button btm) { this.btmissile = btm; } static int flag; public void Shoot() { final Handler handler=new Handler() { @Override public void handleMessage(Message msg) { int i=0; i=msg.arg1; ViewGroup.LayoutParams mp = new AbsoluteLayout.LayoutParams( 30, 60, 200, 700-(i*20) ); btmissile.setLayoutParams(mp); btmissile.invalidate(); super.handleMessage(msg); } };//handler定义 final Runnable runnable=new Runnable() { @Override public void run() { flag=1; for(int t=0;t<40;t++) { try { Message msg=handler.obtainMessage(); msg.arg1=flag; handler.sendMessage(msg); Thread.sleep(200); flag++; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; //runnable定义 new Thread(runnable).start(); }} android工程运行是如何指定初始页面的? 为什么在server里传到activity里的list是null啊 请问有些手机wap需要用户名密码的,socket怎么连接? 关于页面传值的问题 关于UNITY3D添加汉字的问题 adb shell 如何做任务切换 请问怎么判断一个XML字符串是否是合法的XML listview下拉刷新,下拉的时候很卡,一钝一钝的 Android里读写配置文件,用什么方法比较法? 开发一个android富文本编辑器 如何设置Dialog的标题栏的颜色? 很好奇微信是怎么做到好友的头像一换,自己这边马上更新的
这一行有错,这个不能在非UI线程里操作btmissile,界面的更新必须在主线程做,否则会出错。
至于你上面的代码要怎么改呢,大意如下:
重新handler的handMessage(Message msg)方法,然后在需要操作btmissile的地方,先不操作,而是直接给handler发一个消息,真正的处理在handler里做。handler的执行时在主线程里做的。如果不太明白就百度一下android handler 的用法。例子很多。
Handler hand = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
};
};
{
Button btmissile;
public Visclass(Button btm)
{
this.btmissile = btm;
}
static int flag;
public void Vistest()
{
final Handler handler=new Handler()
{ @Override
public void handleMessage(Message msg)
{
int i=0;
i=msg.arg1;
ViewGroup.LayoutParams mp =
new AbsoluteLayout.LayoutParams(
30,
60,
200,
340-(i*20)
);
btmissile.setLayoutParams(mp);
super.handleMessage(msg);
}
};//handler定义
final Runnable runnable=new Runnable()
{
@Override
public void run()
{
flag=1;
for(int t=0;t<5;t++)
{
try {
Message msg=handler.obtainMessage();
msg.arg1=flag;
handler.sendMessage(msg);
Thread.sleep(1000);
flag++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}; //runnable定义
handler.postDelayed(runnable, 0);
}
}修改之后 为什么 不是一步一步地显示 只是延时之后显示走到了最后的位置???
class Shootclass
{
Button btmissile;
public Shootclass(Button btm)
{
this.btmissile = btm;
}
static int flag;
public void Shoot()
{
final Handler handler=new Handler()
{ @Override
public void handleMessage(Message msg)
{
int i=0;
i=msg.arg1;
ViewGroup.LayoutParams mp =
new AbsoluteLayout.LayoutParams(
30,
60,
200,
700-(i*20)
);
btmissile.setLayoutParams(mp);
btmissile.invalidate();
super.handleMessage(msg);
}
};//handler定义
final Runnable runnable=new Runnable()
{
@Override
public void run()
{
flag=1;
for(int t=0;t<40;t++)
{
try {
Message msg=handler.obtainMessage();
msg.arg1=flag;
handler.sendMessage(msg);
Thread.sleep(200);
flag++;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}; //runnable定义
new Thread(runnable).start();
}
}