有没有办法同步 JavaFX 平台线程和标准 Java 线程?目前,触发时,JavaFX 线程会在标准 Java 线程完成将所有图像添加到可观察列表之前触发,因此 imageList 将更新为空白集合。
private final TilePane imageList;
final File[] files = new File(dir).listFiles();
final List<ImageView> views = FXCollections.observableArrayList();
new Thread() {
@Override
public void run() {
for (final File file : files) {
if (Utils.fileIsImage(file) && !file.isDirectory()) {
ImageView view = new ImageView(new Image("file:" + file, 72, 72, false, true));
views.add(view);
}
}
}
}.start();
Platform.runLater(new Runnable() {
@Override
public void run() {
imageList.getChildren().addAll(views);
}
});
我对 JavaFX 和并发性比较陌生,并且没有任何线程锁方面的经验,因此任何帮助都会很棒。谢谢!
最佳答案
new Thread() {
@Override
public void run() {
for (final File file : files) {
if (Utils.fileIsImage(file) && !file.isDirectory()) {
ImageView view = new ImageView(new Image("file:" + file, 72, 72, false, true));
views.add(view);
}
}
Platform.runLater(new Runnable() {
@Override
public void run() {
imageList.getChildren().addAll(views);
}
});
}
}.start();
考虑将 View 一一添加,只要它们已加载:
if (Utils.fileIsImage(file) && !file.isDirectory()) {
ImageView view = new ImageView(new Image("file:" + file, 72, 72, false, true));
views.add(view);
Platform.runLater(new Runnable() {
@Override
public void run() {
imageList.getChildren().add(view);
}
});
}
关于JavaFX线程与Java线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13263201/