如何在睡眠后刷新JavaFX屏幕两次?

如何在睡眠后刷新JavaFX屏幕两次?,javafx,javafx-8,reactive-programming,Javafx,Javafx 8,Reactive Programming,我正在使用JavaFX在屏幕上显示图像。我的FxScreenController代码概念如下: package my.image.concept; import java.util.function.Consumer; import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import

我正在使用JavaFX在屏幕上显示图像。我的
FxScreenController
代码概念如下:

package my.image.concept;

import java.util.function.Consumer;

import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

import org.springframework.stereotype.Component;

@Component
public class FxScreenController {
    private ImageSenderClient imageClient;

    @FXML
    private ImageView imageView;

    private Image image;

    public FxScreenController(Image image) {
        this.image = image;
    }

    @FXML
    public void initialize(){
        final ImageSubscriber imageSubscriber = new ImageSubscriber(image);
        imageClient.GetImageFrom().subscribe(imageSubscriber);
    }

    private static class ImageSubscriber implements Consumer<Image> {
        private ImageView imageFile;

        public ImageSubscriber(Image newImage) {
            this.imageFile.setImage(newImage);
        }

        @Override
        public void accept(Image newImage) {
            Platform.runLater(() -> imageFile.setImage(newImage));
        }
    }
}
但是,在这里它不会显示我的
newImage
,因为它不会刷新屏幕


如何在调用
Thread.sleep
之前刷新FX屏幕,以便在FX屏幕上显示我的
newImage
2秒钟?

创建新的
Thread
解决了我的问题

    @Override
    public void accept(Image newImage) {
        Thread timerThread = new Thread(() -> displayImage(newImage));
        timerThread.start();
    }

    private void displayImage(Image newImage) {
        Platform.runLater(() ->
                imageBg.setImage(newImage)
        );

        try {
            Thread.sleep(2000); // Wait for 2 sec before updating back to main
        }
        catch (InterruptedException ignored) {
        }
        imageBg.setImage(prevImage);
        
    }

在哪个线程上调用了
accept(…)
?我不确定,但听起来好像你想每两秒钟更改一次图像。请将此解决方案发布到Hey@Sedrick,内容有点类似。在某些情况下可以使用它。使用纯
线程
是可行的,但在
JavaFX
中不推荐使用<代码>任务或
服务
优于纯
线程
。在本例中,您正在更改
节点
。首选路径是来自
动画
API的内容<代码>时间线
暂停翻译
可以完成工作。
    @Override
    public void accept(Image newImage) {
        Thread timerThread = new Thread(() -> displayImage(newImage));
        timerThread.start();
    }

    private void displayImage(Image newImage) {
        Platform.runLater(() ->
                imageBg.setImage(newImage)
        );

        try {
            Thread.sleep(2000); // Wait for 2 sec before updating back to main
        }
        catch (InterruptedException ignored) {
        }
        imageBg.setImage(prevImage);
        
    }