首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何发现背景中的JavaFX图像加载失败?

如何发现背景中的JavaFX图像加载失败?
EN

Stack Overflow用户
提问于 2019-07-07 11:26:36
回答 1查看 265关注 0票数 0

问题简述:

如何才能发现,image的后台加载在imageView.setImage(image)之前失败了,结果显示了一个空图片,尽管image.isError==falseimage.getException==null

背景:

在我简单的基于JavaFX的照片查看器应用程序中,我使用一个TableView()来显示带有jpg文件的目录。每当选择表中的条目时,图片都使用javafx类加载,并使用ImageView显示。

我在图像构造函数的参数中使用true加载背景中的照片。加载照片后,我将其保存在列表(“缓存”)中,以便更快地“再次显示”。

在这里,代码片段:

代码语言:javascript
运行
复制
public Object getMediaContent() {
Image image = (Image) content;

if (!isMediaContentValid()) {  //if not already loaded or image in cache is invalid
  try {
    System.out.println("getMediaContent loading " + fileOnDisk);
    content = new Image(fileOnDisk.toUri().toString(), true);  //true=load in Background
  } catch (Exception e) {
    //will not occur with backgroundLoading: image.getException will get the exception
    System.out.println("Exception while loading:");
    e.printStackTrace();
  }
} else {
  System.out.println(fileOnDisk.toString() + "in Cache :-)...Error="+ image.isError() + " Exception=" + image.getException());
}
return content;

}

isMediaContentValid() I测试中

  • 如果图像已经在缓存的列表中
  • 如果image.isError()false
  • 如果image.getException()是null

问题是:

当用户非常迅速地选择照片(例如,通过使用光标向下键),图像仍然被加载在背景中(对于缓存),而下一张照片的加载已经开始。我的简单chache算法在内存耗尽时会出现问题,因为在启动加载时可能会有足够的内存,但不能完成所有的后台任务。

但我认为这并不是一个问题,因为在这种情况下,image.isError()将报告trueimage.getException()!= null。所以我可以在重试之前释放记忆。

但是isError()报告falsegetException()报告null,图像在imageView中显示为“空”:-(

问题:我如何才能发现,image的后台加载在imageView.setImage(image)之前已经失败了

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-07 13:04:35

如何才能发现,在imageView.setImage(image)之前,图像的背景加载已经失败了?

这是不可能的在后台加载图像的全部意义是异步完成的。无法保证在方法返回时已发生异常。您需要使用error属性的侦听器来通知加载映像失败。

示例

代码语言:javascript
运行
复制
Image image = new Image("https://stackoverflow.com/abc.jpg", true); // this image does not (currently) exist
image.errorProperty().addListener(o -> {
    System.err.println("Error Loading Image " + image.getUrl());
    image.getException().printStackTrace();
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56921733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档