Как дождаться полной загрузки изображения в Java - PullRequest
3 голосов
/ 23 ноября 2010

API образа Java предполагает асинхронную загрузку. Различные методы принимают ImageObserver в качестве параметра, который может получить информацию после полной загрузки изображения.

С другой стороны, некоторые типы изображений (например, BufferedImages) не используют ImageObserver и никогда не будут вызывать его.

Итак, как будет выглядеть код, ожидающий полной загрузки изображения?

Я бы хотел иметь метод, подобный

public void waitUntilLoaded(Image img){
    ...
}

Что гарантирует, что изображение полностью загружается при его возврате.

Ответы [ 3 ]

4 голосов
/ 24 ноября 2010

Хорошим вариантом будет java.awt.MediaTracker. Хороший пример кода в документации API . Вкратце, вы создаете объект MediaTracker для отслеживания изображений для компонента, сообщаете ему, какие изображения вы хотите отслеживать, а затем вызываете tracker.waitForID(n), который будет блокироваться, пока указанное изображение не завершит загрузку.

Очевидно, вам нужно не допустить этого в ветку событий - но вы это знали. :)

1 голос
/ 23 ноября 2010

Используйте javax.imageio.event.IIOReadProgressListener и переопределите его imageComplete метод вместо ImageObserver.

Это предполагает, что вы можете изменить код для использованияjavax.imageio.ImageReader для его фактического чтения (создано с использованием одного из статических методов ImageIO).

0 голосов
/ 09 июля 2017

Другая альтернатива, которую я нашел, это дождаться, пока img.getWidth() вернет значение, отличное от -1. Вы можете сделать это более чистым способом, используя петли Threads и while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...