致命异常计时器-0错误

时间:2014-08-05 04:39:04

标签: java android

我是编程新手,所以我不知道大多数错误,它们是什么意思?如果有人能告诉我如何解决这个错误,那真的会有所帮助。

我尝试使用这组代码会让图片淡入并显示几秒钟,并在几秒后淡出。

代码位于onCreate()

final ImageView wavem = (ImageView)findViewById(R.id.wavem);
        final Animation animationFadeIn = AnimationUtils.loadAnimation(this, R.drawable.fadein);
        final Animation animationFadeOut = AnimationUtils.loadAnimation(this, R.drawable.fadeout);
        final int time = 8000;
        final int readtime = 4000;

    new java.util.Timer().schedule( 
            new java.util.TimerTask() {
                    @Override
                    public void run() {
                    wavem.startAnimation(animationFadeIn);

                        new java.util.Timer().schedule( 
                        new java.util.TimerTask() {
                        @Override
                        public void run() {
                        wavem.startAnimation(animationFadeOut);
                                          }}, readtime);
                    }
            }, time 
            );

我得到的错误日志是:

08-05 04:18:36.428: E/AndroidRuntime(972): FATAL EXCEPTION: Timer-0
08-05 04:18:36.428: E/AndroidRuntime(972): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
08-05 04:18:36.428: E/AndroidRuntime(972):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4607)
08-05 04:18:36.428: E/AndroidRuntime(972):  at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:867)
08-05 04:18:36.428: E/AndroidRuntime(972):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:4066)
08-05 04:18:36.428: E/AndroidRuntime(972):  at android.view.View.invalidate(View.java:10250)
08-05 04:18:36.428: E/AndroidRuntime(972):  at android.view.View.startAnimation(View.java:15449)
08-05 04:18:36.428: E/AndroidRuntime(972):  at java.util.Timer$TimerImpl.run(Timer.java:284)

我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

错误即将发生,因为您使用UI线程创建了视图“wavem”,并且您正在使用TimerTask创建的线程中更改它。

所以在timetask里面而不只是做

wavem.startAnimation(animationFadeIn);

在两个地方都这样做

runOnUiThread(new Runnable(){
public void run() {
  wavem.startAnimation(animationFadeIn);
}
});