我的代码是:
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):threadid = 11:线程退出未捕获异常(组= 0x40a13300)
07-01 15:27:30.786:E / AndroidRuntime(973):致命异常:Timer-0
07-01 15:27:30.786:E / AndroidRuntime(973):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序 07-01 15:27:30.786:E / AndroidRuntime(973):在android.os.Handler。(Handler.java:121)
07-01 15:27:30.786:E / AndroidRuntime(973):在android.widget.Toast $ TN。(Toast.java:322)
07-01 15:27:30.786:E / AndroidRuntime(973):在android.widget.Toast。(Toast.java:91)
07-01 15:27:30.786:E / AndroidRuntime(973):在android.widget.Toast.makeText(Toast.java:238)
07-01 15:27:30.786:E / AndroidRuntime(973):在ir.maghsoodi.reminders.MainActivity $ 1 $ 1.run(MainActivity.java:45)
07-01 15:27:30.786:E / AndroidRuntime(973):at java.util.Timer $ TimerImpl.run(Timer.java:284)
答案 0 :(得分:2)
TimerTask
在另一个线程(TimerThread)中执行,您无法从不是主线程的线程更新UI
个元素。
使用btnstart.post( Runnable )
执行UI线程内的代码。
实施例
if(ou==0) {
btnstart.post(new Runnable() {
@Override
public void run() {
btnstart.setText(btnstart.getText().toString()+"t");
}
});
}
答案 1 :(得分:1)