我的代码是:
ou=100
final Timer t=new Timer();
TimerTask tt=new TimerTask() {
@Override
public void run() {
ou-=10;
if(ou==0)
btnstart.setText(btnstart.getText().toString()+"t");
}};
t.scheduleAtFixedRate(tt, 2000, 2000);
但是当我运行这个程序的时候,更改btnstart. text程序会关闭这个错误“不幸的是,已经停止了”
这是我的原木猫:
07-01 15:27:30.714:W/dalvikvm(973):triadid=11:线程退出且未捕获异常(group=0x40a13300)
07-01 15:27:30.786:E/AndroidRuntime(973):FATAL EXCEPTION:Timer-0
07-01 15:27:30.786:E/AndroidRuntime(973):java.lang.RuntimeException:无法在未调用Loopo的线程内创建处理程序。准备()
07-01 15:27:30.786:E/AndroidRuntime(973):at android.os.Handler。(Handler.java:121)
07-01 15:27:30.786:E/AndroidRuntime(973):at android.widget.Toast$TN。(Toast.java:322)
07-01 15:27:30.786:E/AndroidRuntime(973):at androidMainActivity1美元1.run(MainActivity.java:45)
07-01 15:27:30.786:E/AndroidRuntime(973):at java.util.Timer$TimerImpl.run(Timer.java:284)
TimerTask
在另一个线程(TimerThread)中执行,您不能从非主线程更新UI
元素。
使用btnstart.post(Runnable)
执行线程中UI代码。
例子
if(ou==0) {
btnstart.post(new Runnable() {
@Override
public void run() {
btnstart.setText(btnstart.getText().toString()+"t");
}
});
}
你不能从另一个线程更新UI,你需要使用这里解释的处理程序,或者(在我看来更容易)使用eventbus库