Example usage for javafx.scene.image Image progressProperty

List of usage examples for javafx.scene.image Image progressProperty

Introduction

In this page you can find the example usage for javafx.scene.image Image progressProperty.

Prototype

public final ReadOnlyDoubleProperty progressProperty() 

Source Link

Usage

From source file:com.adr.mimame.PlatformList.java

public Image getCachedImage(String url) {

    if (url == null) {
        return null;
    } else if (!"http".equalsIgnoreCase(url.substring(0, 4)) && !"ftp".equalsIgnoreCase(url.substring(0, 3))) {
        // a local image
        return new Image(url, true);
    } else {/* w  w  w. j a va  2s  . co  m*/
        // a remote image
        try {
            File cachedir = new File(mimamememuhome, "IMGCACHE");
            FileUtils.forceMkdir(cachedir);

            MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(url.getBytes("UTF-8"));
            String cachefilename = Base64.getUrlEncoder().encodeToString(md.digest());
            File cachefile = new File(cachedir, cachefilename + ".png");
            File cachefilenull = new File(cachedir, cachefilename + ".null");

            if (cachefilenull.exists()) {
                return null;
            } else if (cachefile.exists()) {
                return new Image(cachefile.toURI().toURL().toString(), true);
            } else {
                Image img = new Image(url, true);
                img.progressProperty().addListener(
                        (ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
                            if (newValue.doubleValue() == 1.0) {
                                exec.execute(() -> {
                                    try {
                                        if (img.isError()) {
                                            cachefilenull.createNewFile();
                                        } else {
                                            ImageIO.write(SwingFXUtils.fromFXImage(img, null), "png",
                                                    cachefile);
                                        }
                                    } catch (IOException ex) {
                                        logger.log(Level.SEVERE, "Cannot save image cache.", ex);
                                    }
                                });
                            }
                        });
                return img;
            }
        } catch (IOException | NoSuchAlgorithmException ex) {
            logger.log(Level.SEVERE, "Cannot create image cache.", ex);
            return new Image(url);
        }
    }
}