我正在创建资产共享应用程序。应用程序从来自我的服务器的数据加载切片。用户可以从/向服务器下载和上载资产。资产可以包含或不包含图像。磁贴使用资产图像作为背景,如果在服务器上找不到,则使用默认图像。
资产本身以散列命名,如果提供了图像,则图像文件的名称相同,使用" 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%......
当图像没有显示时,谁会有更好的想法显示默认图像,而不会检查消耗大量时间的网址?