МедиаТрекер - как им пользоваться, в чем преимущества, есть ли альтернатива?

В кодовой базе мы унаследовали использование 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 к каждому компоненту (обычно к фрейму или JFrame), что настоятельно подразумевается как подход, используемый документация конструктора.

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

  1. Как и зачем использовать МедиаТрекер?

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


person Charles Goodwin    schedule 12.08.2011    source источник


Ответы (2)


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

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

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

person sbridges    schedule 10.09.2011

MediaTracker

?

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

person Andrew Thompson    schedule 08.09.2011
comment
пока эти фрагменты находятся в сети, MediaTracker выиграл не умру. - person oliholz; 08.09.2011
comment
Вот статья, в которой превозносятся преимущества ImageIO перед MediaTracker. . - person Charles Goodwin; 08.09.2011
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. - person piet.t; 21.07.2015
comment
@piet.t 1) Нет, см. (3) 2) Нет (с 2002 г., см. (3)). 3) ImageIO - person Andrew Thompson; 21.07.2015