Javafx Image占位符

时间:2015-10-27 12:46:16

标签: javafx javafx-2 javafx-8

我正在创建资产共享应用程序。应用程序从来自我的服务器的数据加载切片。用户可以从/向服务器下载和上载资产。资产可以包含或不包含图像。磁贴使用资产图像作为背景,如果在服务器上找不到,则使用默认图像。

资产本身以散列命名,如果提供了图像,则图像文件的名称相同,使用" png"扩展,无需数据库查询或更多工作即可轻松查找图像。

当应用加载时,它从服务器获取数据并在后台加载图像。

我知道有一种方法可以使用html返回码来检查图像是否存在,例如

public static boolean urlExists(String url)
{
    try
    {
        HttpsURLConnection.setFollowRedirects(false);
        HttpsURLConnection con = (HttpsURLConnection) new URL(url).openConnection();
        con.setRequestMethod("HEAD");
        return (con.getResponseCode() == HttpsURLConnection.HTTP_OK);
    }
    catch (Exception e)
    {
        e.printStackTrace();
        return false;
    }
}

但这可能需要时间,因为我在启动时加载了大约500个资产,从而减慢了我的加载过程。

所以我想,嘿,只是提供图片构造函数的url,无论如何,如果网址不存在,我们不会收到错误,但是空图像......

tileBackground.setImage(getObj().getImageURL());

问题,如果该图片为空,我仍然希望显示一个占位符...

我曾尝试使用Image.isError()/ image.errorProperty()/ image.exceptionProperty(),但即使网址不存在,这些也不会显示。所以我想,让我们这样做:

Image image = new Image(MainApp.class.getResourceAsStream("view/img/default-tile-icon.png"));
ImageView tileBackground= new ImageView(image);
getObj()._image.progressProperty().addListener((observable, oldValue, newValue) -> {
        if (newValue.intValue() == 1) {
            tileBackground.setImage(getObj().getImage());
        }
    });

所以从技术上讲,为每个图块设置一个默认图像,当对象完成加载图像时,将其设置为图块背景......但是现有的url图像也会加载到100%......

当图像没有显示时,谁会有更好的想法显示默认图像,而不会检查消耗大量时间的网址?

0 个答案:

没有答案