2012-12-24 72 views
3

我不明白爲什麼我得到這個錯誤。 我一直在四處尋找不同的代碼,我用這個計時器之一,因爲我不知道如何坦率地使用Java定時器,現在它只是崩潰我的應用程序..任何幫助嗎?我得到了什麼樣的錯誤? Android定時器錯誤

timer.schedule(new TimerTask() { 
     public void run() { 

      findViewById(R.id.progressBar1).setVisibility(View.GONE); 
      findViewById(R.id.loadingn).setVisibility(View.GONE); 

      findViewById(R.id.tuser).setVisibility(View.VISIBLE); 
      findViewById(R.id.tpass).setVisibility(View.VISIBLE); 
      loginbutton.setVisibility(View.VISIBLE); 
      findViewById(R.id.username).setVisibility(View.VISIBLE); 
      findViewById(R.id.pass).setVisibility(View.VISIBLE); 
      timer.cancel(); 
     } 
    }, 5000, 5000); 

我忘了...這是個錯誤代碼:

12-24 05:53:19.639: E/AndroidRuntime(9887):  FATAL EXCEPTION: Timer-0 
12-24 05:53:19.639: E/AndroidRuntime(9887):  android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4176) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:749) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:805) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:4005) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at android.view.View.invalidate(View.java:8591) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at android.view.View.setFlags(View.java:6718) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at android.view.View.setVisibility(View.java:4632) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at info.david.statusbar.MainActivity$1.run(MainActivity.java:43) 
12-24 05:53:19.639: E/AndroidRuntime(9887):  at java.util.Timer$TimerImpl.run(Timer.java:284) 
+0

它是如何編制? – Blackbelt

+1

您無法直接從計時器線程訪問UI元素 –

回答

5

使用runOnUiThreadTimerTask訪問UI元素爲:

timer.schedule(new TimerTask() { 
    public void run() { 
    Your_Current_Activity.this.runOnUiThread(new Runnable() 
     { 
      public void run() 
      { 

        // access UI here 
      } 

     }); 
    } 
}, 5000, 5000); 
+0

但是,我會如何處理計時器?我該怎麼做?或者我只是把你在TimerTask代碼 – iEpic

+1

@ user1926503陳述的代碼:請參閱我的編輯答案 –

+1

非常感謝你Prosper K.非常感謝! (: – iEpic

相關問題