gpt4 book ai didi

java - 如何发现后台JavaFX图像加载失败?

转载 作者:行者123 更新时间:2023-12-02 01:25:57 25 4
gpt4 key购买 nike

简短的问题:

我如何才能知道,image 的后台加载在 imageView.setImage(image) 之前失败,导致显示空图片,尽管 image. isError==falseimage.getException==null

背景:

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

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

这里是代码片段:

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()中我测试

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

问题:

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

但我预计这不是问题,因为 image.isError() 会报告 trueimage.getException()在这种情况下,!= null。所以我可以在重试之前释放内存。

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

问题:我如何才能知道 image 的后台加载在 imageView.setImage(image) 之前失败?

最佳答案

How can I find out, that background loading of image has failed just before imageView.setImage(image)?

这是不可能的。在后台加载图像的要点在于它是异步完成的。无法保证该方法返回时已发生异常。您需要使用 error 属性的监听器来接收图像加载失败的通知。

示例

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();
});

关于java - 如何发现后台JavaFX图像加载失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56921733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com