Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java timer.scheduleAtFixedRate存在异常_Java_Android_Timer - Fatal编程技术网

Java timer.scheduleAtFixedRate存在异常

Java timer.scheduleAtFixedRate存在异常,java,android,timer,Java,Android,Timer,我的代码是: 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

我的代码是:

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):致命异常:计时器-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.members.MainActivity$1$1.run(MainActivity.java:45)
07-01 15:27:30.786:E/AndroidRuntime(973):在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,您需要使用解释过的处理程序,或者(在我看来更容易)使用库

我该怎么做?你能解释更多吗?我怎样才能发送祝酒辞而不是更改按钮的文本?(对于一个新问题,请问另一个问题)我该怎么做?你能再解释一下吗?