gpt4 book ai didi

java - JavaFX线程与Java线程的同步

转载 作者:行者123 更新时间:2023-12-03 12:52:40 26 4
gpt4 key购买 nike

有没有办法同步JavaFX Platform线程和标准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 时一一添加 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);
}
});
}

关于java - JavaFX线程与Java线程的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13263201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com