我认为这将是一个简单的问题,但我找不到答案.我有一个与JavaFX Scene对象关联的ImageView对象,我想从磁盘加载大图像并使用ImageView依次显示它们.我一直在试图找到一种重复检查Image对象的好方法,当它在后台加载完成后,将它设置为ImageView,然后开始加载一个新的Image对象.我提出的代码(下面)有时会工作,有时则不会.我很确定我遇到了JavaFX和线程的问题.它有时加载第一张图像并停止.变量"processing"是类中的布尔实例变量.
在后台加载JavaFX中的图像并在加载后将其设置为ImageView的正确方法是什么?
public void start(Stage primaryStage) {
...
ImageView view = new ImageView();
((Group)scene.getRoot()).getChildren().add(view);
...
Thread th = new Thread(new Thread() {
public void run() {
while(true) {
if (!processing) {
processing = true;
String filename = files[count].toURI().toString();
Image image = new Image(filename,true);
image.progressProperty().addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number progress) {
if ((Double) progress == 1.0) {
if (! image.isError()) {
view.setImage(image);
}
count++;
if (count == files.length) {
count = 0; …Run Code Online (Sandbox Code Playgroud)