如何解决睡眠后如何刷新JavaFX屏幕两次?
我正在使用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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。