使用JavaFX从图像的ArrayList进行幻灯片放映

时间:2015-01-02 21:55:33

标签: java arraylist javafx

我正在尝试通过拍摄ArrayList张图片并使用ImageView循环将它们放入for来创建幻灯片。但是,为了“暂停”程序以便每个图像都可见,我尝试使用Thread.sleep。遗憾的是,这并没有产生预期的效果。在试图解决这个问题时,我无休止的谷歌搜索让我怀疑我应该使用Timeline类,但我不知道如何实现它。任何帮助将非常感激。我的功能失调代码看起来像这样:

for (int i = 0; i < imageArrayList.size(); i++) {
    try {
        Thread.sleep(1000);
    } catch (Exception e) {
        System.out.println("Error: " + e.toString());
    }
    slideshowImageView.setImage(imageArrayList.get(i));
}

2 个答案:

答案 0 :(得分:2)

经过长时间的谷歌搜索后想出来

    int count; //declared as global variable         



//then the working logic in my eventhandler
    Task task = new Task<Void>() {
                    @Override
            public Void call() throws Exception {
                        for (int i = 0; i < imageArrayList.size(); i++) {
                            Platform.runLater(new Runnable() {
                                @Override
            public void run() {
                                    slideshowImageView.setImage(imageArrayList.get(slideshowCount));
                                    slideshowCount++;
                                    if (slideshowCount >= imageArrayList.size()) {
                                        slideshowCount = 0;
                                    }
                                }
                            });

                        Thread.sleep(1000);

                    }
                    return null;
                }
            };
            Thread th = new Thread(task);
            th.setDaemon(true);
            th.start();

        });

答案 1 :(得分:1)

使用Timer每一毫秒更新一次图像

public int count = 0;

// then in your method

long delay = 2000; //update once per 2 seconds.
new Timer().schedule(new TimerTask() {

    @Override
    public void run() {
        slideshowImageView.setImage(imageArrayList.get(count++));
        if (count >= imageArrayList.size() {
            count = 0;
        }
    }
}, 0, delay);

此外,slideshowImageViewimageArrayList必须是要在`TimerTask中访问的字段或final变量。