MediaTracker - как его использовать, в чем преимущества или есть альтернатива? - PullRequest
6 голосов
/ 12 августа 2011

В кодовой базе, которую мы унаследовали, использование MediaTracker всегда выполнялось локально в каждом блоке кода.

new MediaTracker(new Canvas());
mediatracker.addImage(i, 1);
try {
    mediatracker.waitForAll();
} catch (InterruptedException e) { }
mediatracker.removeImage(i);

Решив, что это неэффективно, я в итоге заменил его статическим экземпляром иМетод:

final static protected MediaTracker mediatracker = new MediaTracker(new Canvas());

static protected void checkImageIsReady(Image i) {
    mediatracker.addImage(i, 1);
    try {
        mediatracker.waitForAll();
    } catch (InterruptedException e) { }
    mediatracker.removeImage(i);
}

До сих пор не было никаких побочных эффектов.

Существует еще один возможный подход - прикрепить MediaTracker к каждому компоненту (обычно это Frame или JFrame), что явно подразумевается.как подход к документации конструктора .

Итак, у меня есть 2 вопроса:

  1. Как и почему использовать MediaTracker?

  2. Какая альтернатива?

Ответы [ 2 ]

8 голосов
/ 10 сентября 2011

MediaTracker был полезен в 1995 году. В то время основным использованием java в графическом интерфейсе были апплеты, и апплеты обычно медленно загружали изображения по сети.

Чтобы облегчить работу создателей апплетов, java дал нам хороший API MediaTracker, который загружал изображения в фоновом режиме, отслеживал, когда они были сделаны, и даже давал уведомления, когда изображения были частично загружены . API MediaTracker означал, что разработчикам апплетов не нужно было блокировать приложение, пока изображения медленно загружались, и не нужно было писать сложный многопоточный код для загрузки изображений в фоновые потоки.

В эти дни вы обычно можете загружать изображения синхронно, и лучше всего использовать ImageIO . Это особенно верно для общего случая, когда изображения загружаются из локальной файловой системы.

3 голосов
/ 08 сентября 2011

MediaTracker

?

Присоединяйтесь к нам в третьем тысячелетии и используйте ImageIO.read(File/URL/InputStream). В нашем тысячелетии MediaTracker не имеет значения.

...