我正在尝试通过拍摄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));
}
答案 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);
此外,slideshowImageView
和imageArrayList
必须是要在`TimerTask中访问的字段或final
变量。