2011-04-05 62 views
0

我正在使用一個計時器和文本視圖,在計時器運行方法中,我不斷獲取時間,但是當我試圖用時間更新文本視圖時,它的shwing致命異常,任何人都可以幫助我,我還發送源代碼更新文本視圖中的計時器問題

protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.clock); 
     timeview=(TextView) findViewById(R.id.currenttime); 
     Timer timer=new Timer(); 
     timer.schedule(new UpdateTimeTask(), 100, 100); 

    } 

    class UpdateTimeTask extends TimerTask{ 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      int hour= new java.sql.Time(System.currentTimeMillis()).getHours(); 
       int min=new java.sql.Time(System.currentTimeMillis()).getMinutes(); 
       int sec=new java.sql.Time(System.currentTimeMillis()).getSeconds(); 

       String time="TIME is "+hour+":"+min+":"+sec; 
       System.out.println(time); 
       //ClockActivity.currentTime=time; 
      timeview.setText(time); 
     } 

和logcat的是如下

04-06 00:03:19.337: WARN/dalvikvm(391): threadid=7: thread exiting with uncaught exception (group=0x4001d800) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391): FATAL EXCEPTION: Timer-0 
04-06 00:03:19.436: ERROR/AndroidRuntime(391): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.ViewRoot.checkThread(ViewRoot.java:2802) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.ViewRoot.requestLayout(ViewRoot.java:594) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.View.requestLayout(View.java:8125) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.View.requestLayout(View.java:8125) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.View.requestLayout(View.java:8125) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.View.requestLayout(View.java:8125) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:254) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.View.requestLayout(View.java:8125) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.view.View.requestLayout(View.java:8125) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.widget.TextView.checkForRelayout(TextView.java:5378) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.widget.TextView.setText(TextView.java:2688) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.widget.TextView.setText(TextView.java:2556) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at android.widget.TextView.setText(TextView.java:2531) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at com.test.ClockActivity$UpdateTimeTask.run(ClockActivity.java:41) 
04-06 00:03:19.436: ERROR/AndroidRuntime(391):  at java.util.Timer$TimerImpl.run(Timer.java:289) 
04-06 00:03:19.506: WARN/ActivityManager(67): Force finishing activity com.test/.ClockActivity 
04-06 00:03:19.546: WARN/ActivityManager(67): Force finishing activity com.test/.HomeActivity 
04-06 00:03:20.876: INFO/ActivityManager(67): Displayed activity com.test/.ClockActivity: 2459 ms (total 2459 ms) 

例外是fatal exception timer 0

回答

6

每當你想修改從另一個線程這不是UI線程的UI,使用runOnUiThread方法:

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     timeview.setText(time); 
    } 
});