I am using JavaFX to show images on the screen. My FxScreenController
code concept is like:
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));
}
}
}
I am displaying an image that comes from the Subscriber
method.
In order to show image on JavaFX Screen
, I am calling Platform.runLater()
. The image is shown properly.
I would like to show my previous image back after a 2-seconds pause like this:
@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));
}
However, here it doesn't show my newImage
because it doesn't refresh the screen.
How can I can refresh the FX screen before calling Thread.sleep
, so that I can show my newImage
for 2 seconds on the FX screen?