Вопрос вкратце:
Как узнать, что фоновая загрузка image
не удалась незадолго до того, как imageView.setImage(image)
приведет к отображению пустой картинки, хотя image.isError==false
и image.getException==null
?
Справочная информация:
В моем простом приложении для просмотра фотографий на основе JavaFX я использую TableView () для отображения каталога с файлами jpg. Всякий раз, когда кто-либо выбирает запись в таблице, изображение загружается с использованием класса изображений javafx и отображается с использованием ImageView.
Я загружаю фотографии в фоновом режиме, используя true
в параметре Image-constructor.
После загрузки фотографии я сохраняю ее в списке («Кэш») для более быстрого «показа снова»
Вот фрагмент кода:
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()
сообщит true
или image.getException()
будет != null
в этом случае. Так что я мог освободить память перед повторной попыткой.
Но isError()
сообщает false
, getException()
сообщает null
, и изображение отображается "пустым" в imageView: - (
Вопрос:
Как я могу узнать, что фоновая загрузка image
не удалась незадолго до imageView.setImage(image)
?