模块 java.desktop
 java.awt

类 MediaTracker

java.lang.Object
java.awt.MediaTracker
所有已实现的接口:
Serializable

public class MediaTracker extends Object implements Serializable
MediaTracker 类是一个实用程序类,用于跟踪多个媒体对象的状态。媒体对象可以包括音频剪辑和图像,但目前仅支持图像。

要使用媒体跟踪器,请创建 MediaTracker 的实例并为每个要跟踪的图像调用其 addImage 方法。此外,每个图像都可以分配一个唯一的标识符。此标识符控制获取图像的优先顺序。它还可以用于识别可以独立等待的图像的唯一子集。具有较低 ID 的图像优先于具有较高 ID 编号的图像加载。

由于动画图像加载和绘制的多部分性质,跟踪动画图像可能并不总是有用,但它是受支持的。 MediaTracker 在第一帧完全加载时将动画图像视为完全加载。那时,MediaTracker 向所有服务员发出图像已完全加载的信号。如果第一帧加载完成后没有 ImageObserver 观察图像,则图像可能会自行刷新以节省资源(参见 Image.flush() )。

这是使用 MediaTracker 的示例:



 import java.applet.Applet;
 import java.awt.Color;
 import java.awt.Image;
 import java.awt.Graphics;
 import java.awt.MediaTracker;

 public class ImageBlaster extends Applet implements Runnable {
   MediaTracker tracker;
   Image bg;
   Image anim[] = new Image[5];
   int index;
   Thread animator;

   // Get the images for the background (id == 0)
   // and the animation frames (id == 1)
   // and add them to the MediaTracker
   public void init() {
     tracker = new MediaTracker(this);
     bg = getImage(getDocumentBase(),
         "images/background.gif");
     tracker.addImage(bg, 0);
     for (int i = 0; i < 5; i++) {
       anim[i] = getImage(getDocumentBase(),
           "images/anim"+i+".gif");
       tracker.addImage(anim[i], 1);
     }
   }

   // Start the animation thread.
   public void start() {
     animator = new Thread(this);
     animator.start();
   }

   // Stop the animation thread.
   public void stop() {
     animator = null;
   }

   // Run the animation thread.
   // First wait for the background image to fully load
   // and paint. Then wait for all of the animation
   // frames to finish loading. Finally, loop and
   // increment the animation frame index.
   public void run() {
     try {
       tracker.waitForID(0);
       tracker.waitForID(1);
     } catch (InterruptedException e) {
       return;
     }
     Thread me = Thread.currentThread();
     while (animator == me) {
       try {
         Thread.sleep(100);
       } catch (InterruptedException e) {
         break;
       }
       synchronized (this) {
         index++;
         if (index >= anim.length) {
           index = 0;
         }
       }
       repaint();
     }
   }

   // The background image fills the frame so we
   // don't need to clear the applet on repaints.
   // Just call the paint method.
   public void update(Graphics g) {
     paint(g);
   }

   // Paint a large red rectangle if there are any errors
   // loading the images. Otherwise always paint the
   // background so that it appears incrementally as it
   // is loading. Finally, only paint the current animation
   // frame if all of the frames (id == 1) are done loading,
   // so that we don't get partial animations.
   public void paint(Graphics g) {
     if ((tracker.statusAll(false) & MediaTracker.ERRORED) != 0) {
       g.setColor(Color.red);
       g.fillRect(0, 0, size().width, size().height);
       return;
     }
     g.drawImage(bg, 0, 0, this);
     if (tracker.statusID(1, false) == MediaTracker.COMPLETE) {
       g.drawImage(anim[index], 10, 10, this);
     }
   }
 }
  

自从:
1.0
参见:
  • 字段摘要

    字段
    修饰符和类型
    Field
    描述
    static final int
    指示媒体下载已中止的标志。
    static final int
    指示媒体下载已成功完成的标志。
    static final int
    指示媒体下载遇到错误的标志。
    static final int
    指示当前正在加载媒体的标志。
  • 构造方法总结

    构造方法
    构造方法
    描述
    创建一个媒体跟踪器来跟踪给定组件的图像。
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    addImage(Image image, int id)
    将图像添加到此媒体跟踪器正在跟踪的图像列表中。
    void
    addImage(Image image, int id, int w, int h)
    将缩放图像添加到此媒体跟踪器正在跟踪的图像列表中。
    boolean
    检查此媒体跟踪器跟踪的所有图像是否已完成加载。
    boolean
    checkAll(boolean load)
    检查此媒体跟踪器跟踪的所有图像是否已完成加载。
    boolean
    checkID(int id)
    检查此媒体跟踪器跟踪的所有标记有指定标识符的图像是否已完成加载。
    boolean
    checkID(int id, boolean load)
    检查此媒体跟踪器跟踪的所有标记有指定标识符的图像是否已完成加载。
    返回遇到错误的所有媒体的列表。
    getErrorsID(int id)
    返回遇到错误的具有指定 ID 的媒体列表。
    boolean
    检查所有图像的错误状态。
    boolean
    isErrorID(int id)
    检查此媒体跟踪器跟踪的具有指定标识符的所有图像的错误状态。
    void
    从此媒体跟踪器中删除指定的图像。
    void
    removeImage(Image image, int id)
    从此媒体跟踪器的指定跟踪 ID 中删除指定图像。
    void
    removeImage(Image image, int id, int width, int height)
    从此媒体跟踪器中删除具有指定宽度、高度和 ID 的指定图像。
    int
    statusAll(boolean load)
    计算并返回按位包含OR此媒体跟踪器跟踪的所有媒体的状态。
    int
    statusID(int id, boolean load)
    计算并返回按位包含OR此媒体跟踪器跟踪的具有指定标识符的所有媒体的状态。
    void
    开始加载此媒体跟踪器跟踪的所有图像。
    boolean
    waitForAll(long ms)
    开始加载此媒体跟踪器跟踪的所有图像。
    void
    waitForID(int id)
    开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。
    boolean
    waitForID(int id, long ms)
    开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 字段详细信息

  • 构造方法详细信息

    • MediaTracker

      public MediaTracker(Component  comp)
      创建一个媒体跟踪器来跟踪给定组件的图像。
      参数:
      comp - 最终将在其上绘制图像的组件
  • 方法详情

    • addImage

      public void addImage(Image  image, int id)
      将图像添加到此媒体跟踪器正在跟踪的图像列表中。图像最终将以其默认(未缩放)大小呈现。
      参数:
      image - 要跟踪的图像
      id - 用于跟踪此图像的标识符
    • addImage

      public void addImage(Image  image, int id, int w, int h)
      将缩放图像添加到此媒体跟踪器正在跟踪的图像列表中。图像最终将以指定的宽度和高度呈现。
      参数:
      image - 要跟踪的图像
      id - 可用于跟踪此图像的标识符
      w - 渲染图像的宽度
      h - 渲染图像的高度
    • checkAll

      public boolean checkAll()
      检查此媒体跟踪器跟踪的所有图像是否已完成加载。

      如果图像尚未加载,则此方法不会开始加载图像。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 isErrorAnyisErrorID 方法检查错误。

      返回:
      true 如果所有图像都已完成加载、已中止或遇到错误; false否则
      参见:
    • checkAll

      public boolean checkAll(boolean load)
      检查此媒体跟踪器跟踪的所有图像是否已完成加载。

      如果 load 标志的值为 true ,则此方法开始加载任何尚未加载的图像。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 isErrorAnyisErrorID 方法检查错误。

      参数:
      load - 如果是 true ,则开始加载任何尚未加载的图像
      返回:
      true 如果所有图像都已完成加载、已中止或遇到错误; false否则
      参见:
    • isErrorAny

      public boolean isErrorAny()
      检查所有图像的错误状态。
      返回:
      true 如果此媒体跟踪器跟踪的任何图像在加载过程中出现错误; false否则
      参见:
    • getErrorsAny

      public Object [] getErrorsAny()
      返回遇到错误的所有媒体的列表。
      返回:
      此媒体跟踪器跟踪的遇到错误的媒体对象数组,如果没有错误则返回 null
      参见:
    • waitForAll

      public void waitForAll() throws InterruptedException
      开始加载此媒体跟踪器跟踪的所有图像。此方法会等到所有被跟踪的图像都完成加载。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 isErrorAnyisErrorID 方法检查错误。

      抛出:
      InterruptedException - 如果任何线程中断了该线程
      参见:
    • waitForAll

      public boolean waitForAll(long ms) throws InterruptedException
      开始加载此媒体跟踪器跟踪的所有图像。此方法会一直等待,直到所有被跟踪的图像都完成加载,或者直到 ms 参数以毫秒为单位指定的时间长度已经过去。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 isErrorAnyisErrorID 方法检查错误。

      参数:
      ms - 等待加载完成的毫秒数
      返回:
      true 如果所有图像都已成功加载; false否则
      抛出:
      InterruptedException - 如果有任何线程中断了该线程。
      参见:
    • statusAll

      public int statusAll(boolean load)
      计算并返回按位包含OR此媒体跟踪器跟踪的所有媒体的状态。

      MediaTracker 类定义的可能标志是 LOADINGABORTEDERROREDCOMPLETE。尚未开始加载的图像的状态为零。

      如果 load 的值为 true ,则此方法开始加载任何尚未加载的图像。

      参数:
      load - 如果是 true ,则开始加载任何尚未加载的图像
      返回:
      按位包含OR所有被跟踪媒体的状态
      参见:
    • checkID

      public boolean checkID(int id)
      检查此媒体跟踪器跟踪的所有标记有指定标识符的图像是否已完成加载。

      如果图像尚未加载,则此方法不会开始加载图像。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 isErrorAnyisErrorID 方法检查错误。

      参数:
      id - 要检查的图像的标识符
      返回:
      true 如果所有图像都已完成加载、已中止或遇到错误; false否则
      参见:
    • checkID

      public boolean checkID(int id, boolean load)
      检查此媒体跟踪器跟踪的所有标记有指定标识符的图像是否已完成加载。

      如果 load 标志的值为 true ,则此方法开始加载任何尚未加载的图像。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 isErrorAnyisErrorID 方法检查错误。

      参数:
      id - 要检查的图像的标识符
      load - 如果是 true ,则开始加载任何尚未加载的图像
      返回:
      true 如果所有图像都已完成加载、已中止或遇到错误; false否则
      参见:
    • isErrorID

      public boolean isErrorID(int id)
      检查此媒体跟踪器跟踪的具有指定标识符的所有图像的错误状态。
      参数:
      id - 要检查的图像的标识符
      返回:
      true 如果具有指定标识符的任何图像在加载过程中出现错误; false否则
      参见:
    • getErrorsID

      public Object [] getErrorsID(int id)
      返回遇到错误的具有指定 ID 的媒体列表。
      参数:
      id - 要检查的图像的标识符
      返回:
      此媒体跟踪器跟踪的具有遇到错误的指定标识符的媒体对象数组,如果没有错误则返回 null
      参见:
    • waitForID

      public void waitForID(int id) throws InterruptedException
      开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。此方法会一直等待,直到具有指定标识符的所有图像都完成加载。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 isErrorAnyisErrorID 方法检查错误。

      参数:
      id - 要检查的图像的标识符
      抛出:
      InterruptedException - 如果有任何线程中断了该线程。
      参见:
    • waitForID

      public boolean waitForID(int id, long ms) throws InterruptedException
      开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。此方法会一直等待,直到具有指定标识符的所有图像都完成加载,或者直到 ms 参数指定的时间长度(以毫秒为单位)已经过去。

      如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用 statusIDisErrorIDisErrorAny 方法检查错误。

      参数:
      id - 要检查的图像的标识符
      ms - 等待加载完成的时间长度(以毫秒为单位)
      返回:
      true 如果装载及时完成;否则false
      抛出:
      InterruptedException - 如果有任何线程中断了该线程。
      参见:
    • statusID

      public int statusID(int id, boolean load)
      计算并返回按位包含OR此媒体跟踪器跟踪的具有指定标识符的所有媒体的状态。

      MediaTracker 类定义的可能标志是 LOADINGABORTEDERROREDCOMPLETE。尚未开始加载的图像的状态为零。

      如果 load 的值为 true ,则此方法开始加载任何尚未加载的图像。

      参数:
      id - 要检查的图像的标识符
      load - 如果是 true ,则开始加载任何尚未加载的图像
      返回:
      按位包含OR正在跟踪的具有指定标识符的所有媒体的状态
      参见:
    • removeImage

      public void removeImage(Image  image)
      从此媒体跟踪器中删除指定的图像。指定图像的所有实例都将被删除,无论比例或 ID 是什么。
      参数:
      image - 要删除的图像
      自从:
      1.1
      参见:
    • removeImage

      public void removeImage(Image  image, int id)
      从此媒体跟踪器的指定跟踪 ID 中删除指定图像。无论规模如何,在指定 ID 下跟踪的所有 Image 实例都将被删除。
      参数:
      image - 要删除的图像
      id - 要从中删除图像的跟踪 ID
      自从:
      1.1
      参见:
    • removeImage

      public void removeImage(Image  image, int id, int width, int height)
      从此媒体跟踪器中删除具有指定宽度、高度和 ID 的指定图像。仅删除指定的实例(包括任何重复项)。
      参数:
      image - 要删除的图像
      id - 要从中删除图像的跟踪 ID
      width - 要移除的宽度(-1 表示未缩放)
      height - 要移除的高度(-1 表示未缩放)
      自从:
      1.1
      参见: