Android 当我调用某个禁用按钮达四分之一秒的方法时,出现致命异常
我正在播放音乐,我有Android 当我调用某个禁用按钮达四分之一秒的方法时,出现致命异常,android,Android,我正在播放音乐,我有next和previous按钮。我不希望用户将这些按钮混搭在一起,所以我尝试将这些按钮延迟四分之一秒 “我的下一个”按钮的代码(上一个按钮相同): instanceSongPlayer是类的名称 taskMaster(1)准备MediaPlayer并开始播放歌曲 倒计时()的代码是: static Timer bd; private static void countdown(){ next.setEnabled(false); previous.setEn
next
和previous
按钮。我不希望用户将这些按钮混搭在一起,所以我尝试将这些按钮延迟四分之一秒
“我的下一个”按钮的代码(上一个按钮相同):
instanceSongPlayer
是类的名称
taskMaster(1)
准备MediaPlayer
并开始播放歌曲
倒计时()的代码是:
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()
,我不知道是什么原因导致了问题 您的TimerTask
正在非UI线程的线程中运行。无法从其他线程访问UI元素
在任务中,使用使UI线程启用按钮。您的TimerTask
正在非UI线程的线程中运行。无法从其他线程访问UI元素
在任务中,使用使UI线程启用按钮。您的TimerTask
正在非UI线程的线程中运行。无法从其他线程访问UI元素
在任务中,使用使UI线程启用按钮。您的TimerTask
正在非UI线程的线程中运行。无法从其他线程访问UI元素
在您的任务中,使用a让您的UI线程启用按钮。谢谢,这是一个简单的解决方案!谢谢,这是一个简单的解决办法!谢谢,这是一个简单的解决办法!谢谢,这是一个简单的解决办法!
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)