错误在一些延迟时间后跳转到方法 [英] Error in Jumping to method after some delay time
本文介绍了错误在一些延迟时间后跳转到方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我米开发基于测验的应用程序,并在该M尝试一些延迟时间之后的某些方法跳可惜m到处一些运行时错误..
下面是code ..
新的Timer()。时间表(新的TimerTask(){
@覆盖
公共无效的run()
{
resetcolor();
下一页();
rg.clearCheck();
showdata();
}
},6000);
这是我的日志猫错误。
12月9日至12日:11:06.775:W / dalvikvm(489):主题ID = 7:螺纹未捕获的异常退出(组= 0x4001d800)
12月9日至12日:11:06.789:E / AndroidRuntime(489):致命异常:定时器0
12月9日至12日:11:06.789:E / AndroidRuntime(489):$ android.view.ViewRoot CalledFromWrongThreadException:只有创建视图层次可以触摸其观点原来的线程。
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.view.ViewRoot.checkThread(ViewRoot.java:2802)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.view.ViewRoot.invalidateChild(ViewRoot.java:607)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.view.View.invalidate(View.java:5115)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.widget.TextView.invalidateDrawable(TextView.java:3796)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.graphics.drawable.Drawable.invalidateSelf(Drawable.java:300)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:227)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:97)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.graphics.drawable.Drawable.setState(Drawable.java:400)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.widget.CompoundButton.drawableStateChanged(CompoundButton.java:271)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.view.View.refreshDrawableState(View.java:7248)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.widget.CompoundButton.setChecked(CompoundButton.java:115)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.widget.RadioGroup.setCheckedStateForView(RadioGroup.java:179)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.widget.RadioGroup.check(RadioGroup.java:159)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在android.widget.RadioGroup.clearCheck(RadioGroup.java:205)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在com.example.quizapp.Firstques $ 1 $ 1.run(Firstques.java:234)
12月9日至12日:11:06.789:E / AndroidRuntime(489):在java.util.Timer中的$ TimerImpl.run(Timer.java:289)
解决方案
重写你的code如下:
新主题(新的Runnable(){
@覆盖
公共无效的run(){
尝试{
视频下载(6000);
runOnUiThread(新的Runnable(){
@覆盖
公共无效的run(){
resetcolor();
下一页();
rg.clearCheck();
showdata();
}
});
}赶上(InterruptedException的E){
Thread.currentThread()中断()。
}
}
})。开始();
您的问题是,你不能碰从后台线程的UI元素。在code以上执行主线程(也称为UI线程)的用户界面的变化。
I m developing a quiz based app and in this m trying to jump on some method after some delay time but unfortunately m getting some Run time Error.. Here's that code..
new Timer().schedule(new TimerTask() {
@Override
public void run()
{
resetcolor();
nextpage();
rg.clearCheck();
showdata();
}
}, 6000);
And here's my Log cat Error..
09-12 12:11:06.775: W/dalvikvm(489): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
09-12 12:11:06.789: E/AndroidRuntime(489): FATAL EXCEPTION: Timer-0
09-12 12:11:06.789: E/AndroidRuntime(489): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
09-12 12:11:06.789: E/AndroidRuntime(489): at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.view.ViewRoot.invalidateChild(ViewRoot.java:607)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.view.View.invalidate(View.java:5115)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.widget.TextView.invalidateDrawable(TextView.java:3796)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.graphics.drawable.Drawable.invalidateSelf(Drawable.java:300)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:227)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:97)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.graphics.drawable.Drawable.setState(Drawable.java:400)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.widget.CompoundButton.drawableStateChanged(CompoundButton.java:271)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.view.View.refreshDrawableState(View.java:7248)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.widget.CompoundButton.setChecked(CompoundButton.java:115)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.widget.RadioGroup.setCheckedStateForView(RadioGroup.java:179)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.widget.RadioGroup.check(RadioGroup.java:159)
09-12 12:11:06.789: E/AndroidRuntime(489): at android.widget.RadioGroup.clearCheck(RadioGroup.java:205)
09-12 12:11:06.789: E/AndroidRuntime(489): at com.example.quizapp.Firstques$1$1.run(Firstques.java:234)
09-12 12:11:06.789: E/AndroidRuntime(489): at java.util.Timer$TimerImpl.run(Timer.java:289)
解决方案
Rewrite your code as follows:
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(6000);
runOnUiThread(new Runnable() {
@Override
public void run() {
resetcolor();
nextpage();
rg.clearCheck();
showdata();
}
});
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}).start();
Your problem is that you cannot touch UI elements from background thread. The code above executes the UI changes in the main thread (also known as "UI thread").
这篇关于错误在一些延迟时间后跳转到方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文