1

我正在设计一个应用程序,它可以浏览一系列图片,就像浏览相册一样。很标准的东西我敢肯定。由于图片必须先查看几秒钟才能自动更改为下一张图片,所以我决定创建一个显示图片的线程,等待几秒钟然后继续。

Picthread(ImageView Image1) {
        this.image = Image1;

    }

    public void run(){

        showPicture(image);
        animal_array = new String[7];

        while (counter < 7){
            try{


                int timer = 0;

                while (timer < 2000){

                    sleep(500);

                    timer+=500;
                }
                image.post(new Runnable(){

                    public void run() {

                         showPicture(image);


                    }

                });



            }
             catch (InterruptedException e) {  
                } 
        }




    }

这实际上奏效了。showPictures 是一个非常简单的方法,只需选择一张图片并将其放在 ImageView 上。对于我的问题,没有必要知道它。起初它不起作用,logcat 说我无法触摸不是在此线程中创建的视图层次结构上的视图。我不确定这意味着什么,所以我做了

image.post(...)

代码。哪个有效。我的主要问题是:为什么这是必要的?如果你看我上面的代码,第一个 showPicture() 方法不在 image.post() 代码中。但没有注册例外。没看懂,为什么不需要发帖?而且为什么我需要发布,因为 Image 是一个类变量,我认为可以被所有线程查看。我很高兴它成功了,但很困惑。

请记住,这是我第一次尝试在 Java 中进行线程化,而不是简单的教科书示例。所以我还是很困惑。

顺便说一句,最后我放弃了整个线程,只是做了

new Thread(new Runnable() {
            public void run() {...}
4

1 回答 1

1

当用 GUI 做“事情”时,你应该总是在 GUI 线程上。就是这样View.post(Runnable)做的,确保 gui 线程完成可运行文件的工作。

即使你的showImage作品一次并不意味着它总是有效...

于 2010-11-17T15:42:56.047 回答