JavaFX线程与Java线程同步

标签 java multithreading javafx-2 java.util.concurrent

有没有办法同步 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/

相关文章:

java - 为什么创建从工作线程实现可运行的类的对象会抛出异常?

java - 如何分析传入消息(Android 上的 JavaFX)

javafx 图表,JavaFx - 推断变量

java - Java中用于链接文本和音频的数据结构

java - Spring Boot 2.1.9.RELEASE - 读取资源文件

java - 理解链表实现的问题

Linux套接字和多线程程序

java - 自动并行化

Python - PyQt 信号 - 发出参数并将其发送到不同的类

contextmenu - 如何禁用文本字段上的默认上下文菜单