2014-01-24 25 views
0

我正在播放音樂,並且我有nextprevious按鈕。我不希望用戶按下這些按鈕,所以我試圖按鈕延遲四分之一秒。當我調用某種方法禁用一個按鈕一秒鐘時發生致命異常

我的下一個按鈕的代碼(以前的按鈕相同):

next.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View button) { 
       try { 
        taskMaster(2); 
        String newPath = nextPath(); 
        instanceSongPlayer isp = new instanceSongPlayer(newTitle(1), album, titles, titlePlace, thisInstance, context, newPath, _activity); 
        isp.taskMaster(1); 
        isp.countdown(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 

instanceSongPlayer是類的名稱

taskMaster(1) PREPS的MediaPlayer並開始歌曲

的代碼countdown()是:

static Timer bd; 

private static void countdown(){ 
    next.setEnabled(false); 
    previous.setEnabled(false); 
    bd = new Timer(); 
    TimerTask task = new TimerTask(){ 
     @Override 
     public void run() { 
      next.setEnabled(true); 
      previous.setEnabled(true); 
     } 
    }; 
    bd.schedule(task, 250); 
} 

(我把它在希望這會奇蹟般地解決了我所有的問題靜態)

這是我得到的錯誤:

01-24 13:32:00.762: E/AndroidRuntime(11743): FATAL EXCEPTION: Timer-2 
01-24 13:32:00.762: E/AndroidRuntime(11743): Process: com.mdc.etuna, PID: 11743 
01-24 13:32:00.762: E/AndroidRuntime(11743): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6094) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:857) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.View.invalidate(View.java:10878) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.View.invalidateDrawable(View.java:14969) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.widget.ImageView.invalidateDrawable(ImageView.java:203) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.graphics.drawable.DrawableContainer.invalidateDrawable(DrawableContainer.java:286) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.graphics.drawable.Drawable.invalidateSelf(Drawable.java:344) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.graphics.drawable.Drawable.setVisible(Drawable.java:575) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:345) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:106) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.graphics.drawable.Drawable.setState(Drawable.java:491) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.View.drawableStateChanged(View.java:15120) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.widget.ImageView.drawableStateChanged(ImageView.java:999) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.View.refreshDrawableState(View.java:15134) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at android.view.View.setEnabled(View.java:6067) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at com.mdc.etuna.instanceSongPlayer$1.run(instanceSongPlayer.java:101) 
01-24 13:32:00.762: E/AndroidRuntime(11743): at java.util.Timer$TimerImpl.run(Timer.java:284) 

誰能給我任何的想法亡羊補牢?由於我從instanceSongPlayer的新實例呼叫countDown(),因此我不知道可能導致問題的原因。

回答

3

您的TimerTask運行在不是UI線程的線程中。您無法從另一個線程訪問UI元素。

在您的任務中,使用Handler讓您的UI線程啓用該按鈕。

+1

謝謝,這是一個簡單的修復! – user2726232

相關問題