错误在一些延迟时间后跳转到方法 [英] Error in Jumping to method after some delay time

查看:176
本文介绍了错误在一些延迟时间后跳转到方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我米开发基于测验的应用程序,并在该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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆