问题描述
我正在使用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));
}
}
}
为了在JavaFX Screen
上显示图像,我打电话给Platform.runLater()
。图片显示正确。
我想在2秒钟的暂停后将我的前一张图像显示回去:
@Override
public void accept(Image newImage) {
Platform.runLater(() -> imageFile.setimage(newImage));
try {
Thread.sleep(2000); // Wait for 2 sec before updating back to prev image
} catch (InterruptedException ignored) {
//
}
Platform.runLater(() -> imageFile.setimage(prewImage));
}
但是,这里没有显示我的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);
}