JavaTM 2 Platform
Standard Ed. 6

java.awt
類別 MediaTracker

java.lang.Object
  繼承者 java.awt.MediaTracker
所有已實作的介面:
Serializable

public class MediaTracker
extends Object
implements Serializable

MediaTracker 類別是一個追蹤多種媒體物件狀態的實用工具類別。媒體對象可以包括音頻剪輯和圖像,但目前僅支持圖像。

要使用媒體追蹤器,需要創建一個 MediaTracker 實例,然後對每個要追蹤的圖像調用其 addImage 方法。另外,還可以為每個圖像分派一個唯一的標識符。此標識符可控制獲取圖像的優先級順序。它還可用於標識可單獨等待的唯一圖像子集。具有較低 ID 的圖像比具有較高 ID 的圖像優先載入。

由於動畫圖像載入和繪製的多部分特性(multi-part nature),追蹤動畫圖像可能不是始終有用,但這一功能的確受支持。在完成動畫圖像的第一幀的載入之後,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);
            }
        }
 }
 

從以下版本開始:
JDK1.0
另請參見:
序列化表格

欄位摘要
static int ABORTED
          指示媒體下載已中止的標誌。
static int COMPLETE
          指示媒體下載已成功完成的標誌。
static int ERRORED
          指示媒體下載出錯的標誌。
static int LOADING
          指示當前正在載入媒體的標誌。
 
建構子摘要
MediaTracker(Component comp)
          創建媒體追蹤器以追蹤給定元件的圖像。
 
方法摘要
 void addImage(Image image, int id)
          向此媒體追蹤器正在追蹤的圖像列表添加一個圖像。
 void addImage(Image image, int id, int w, int h)
          向此媒體追蹤器正在追蹤的圖像列表添加一個經過縮放的圖像。
 boolean checkAll()
          查看此媒體追蹤器正在追蹤的所有圖像是否已完成載入。
 boolean checkAll(boolean load)
          檢查此媒體追蹤器正在追蹤的所有圖像是否都已完成載入。
 boolean checkID(int id)
          檢查由此媒體追蹤器追蹤且使用指定標識符標記的所有圖像是否已完成載入。
 boolean checkID(int id, boolean load)
          檢查由此媒體追蹤器追蹤且使用指定標識符標記的所有圖像是否已完成載入。
 Object[] getErrorsAny()
          返回所有出錯媒體的列表。
 Object[] getErrorsID(int id)
          返回具有出錯的指定 ID 的媒體列表。
 boolean isErrorAny()
          檢查所有圖像的錯誤狀態。
 boolean isErrorID(int id)
          檢查由此媒體追蹤器追蹤且具有指定標識符的所有圖像的錯誤狀態。
 void removeImage(Image image)
          從此媒體追蹤器移除指定的圖像。
 void removeImage(Image image, int id)
          從此媒體追蹤器的指定追蹤 ID 中移除指定的圖像。
 void removeImage(Image image, int id, int width, int height)
          從此媒體追蹤器移除具有指定寬度、高度和 ID 的指定圖像。
 int statusAll(boolean load)
          計算並返回此媒體追蹤器追蹤的所有媒體狀態的按位
 int statusID(int id, boolean load)
          計算或返回由此媒體追蹤器追蹤且具有指定標識符的所有媒體狀態的按位
 void waitForAll()
          開始載入由此媒體追蹤器追蹤的所有圖像。
 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
 

欄位詳細資訊

LOADING

public static final int LOADING
指示當前正在載入媒體的標誌。

另請參見:
statusAll(boolean), statusID(int, boolean), 常數欄位值

ABORTED

public static final int ABORTED
指示媒體下載已中止的標誌。

另請參見:
statusAll(boolean), statusID(int, boolean), 常數欄位值

ERRORED

public static final int ERRORED
指示媒體下載出錯的標誌。

另請參見:
statusAll(boolean), statusID(int, boolean), 常數欄位值

COMPLETE

public static final int COMPLETE
指示媒體下載已成功完成的標誌。

另請參見:
statusAll(boolean), statusID(int, boolean), 常數欄位值
建構子詳細資訊

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(boolean), checkID(int), isErrorAny(), isErrorID(int)

checkAll

public boolean checkAll(boolean load)
檢查此媒體追蹤器正在追蹤的所有圖像是否都已完成載入。

如果此 load 標誌的值為 true,則此方法將開始載入任何尚未載入的圖像。

如果在載入或縮放圖像時出錯,則該圖像被視為已完成載入。使用 isErrorAnyisErrorID 方法檢查錯誤。

參數:
load - 如果為 true,則開始載入任何尚未載入的圖像
返回:
如果所有圖像都已完成載入、發生中止或出錯,則返回 true;否則返回 false
另請參見:
checkID(int), checkAll(), isErrorAny(), isErrorID(int)

isErrorAny

public boolean isErrorAny()
檢查所有圖像的錯誤狀態。

返回:
如果此媒體追蹤器追蹤的任何圖像在載入期間出錯,則返回 true;否則返回 false
另請參見:
isErrorID(int), getErrorsAny()

getErrorsAny

public Object[] getErrorsAny()
返回所有出錯媒體的列表。

返回:
如果此媒體追蹤器在追蹤媒體物件時出錯,則返回一個媒體物件陣列;如果不出錯,則返回 null
另請參見:
isErrorAny(), getErrorsID(int)

waitForAll

public void waitForAll()
                throws InterruptedException
開始載入由此媒體追蹤器追蹤的所有圖像。在完成載入正在追蹤的全部圖像之前,此方法一直等待。

如果在載入或縮放圖像時出錯,則該圖像被視為已完成載入。使用 isErrorAnyisErrorID 方法檢查錯誤。

拋出:
InterruptedException - 如果任何執行緒中斷了此執行緒
另請參見:
waitForID(int), waitForAll(long), isErrorAny(), isErrorID(int)

waitForAll

public boolean waitForAll(long ms)
                   throws InterruptedException
開始載入由此媒體追蹤器追蹤的所有圖像。在完成載入正在追蹤的所有圖像之前,或在 ms 參數(以毫秒為單位)指定的時間到期之前,此方法將一直等待。

如果在載入或縮放圖像時出錯,則認為該圖像已完成載入。使用 isErrorAnyisErrorID 方法檢查錯誤。

參數:
ms - 等待載入完成的毫秒數
返回:
如果所有圖像都成功載入,則返回 true;否則返回 false
拋出:
InterruptedException - 如果任何執行緒中斷了此執行緒
另請參見:
waitForID(int), waitForAll(long), isErrorAny(), isErrorID(int)

statusAll

public int statusAll(boolean load)
計算並返回此媒體追蹤器追蹤的所有媒體狀態的按位

MediaTracker 類別定義的可能標誌有 LOADINGABORTEDERROREDCOMPLETE。對於尚未開始載入的圖像,其狀態值為零。

如果 load 值為 true,則此方法開始載入任何尚未載入的圖像。

參數:
load - 如果為 true,則開始載入任何尚未載入的圖像
返回:
所有正在追蹤媒體狀態的按位
另請參見:
statusID(int, boolean), LOADING, ABORTED, ERRORED, COMPLETE

checkID

public boolean checkID(int id)
檢查由此媒體追蹤器追蹤且使用指定標識符標記的所有圖像是否已完成載入。

如果圖像尚未完成載入,則此方法不能開始載入圖像。

如果在載入或縮放圖像時出錯,則認為該圖像已完成載入。使用 isErrorAnyisErrorID 方法檢查錯誤。

參數:
id - 要檢查的圖像標識符
返回:
如果所有圖像都已完成載入、發生中止或出錯,則返回 true;否則返回 false
另請參見:
checkID(int, boolean), checkAll(), isErrorAny(), isErrorID(int)

checkID

public boolean checkID(int id,
                       boolean load)
檢查由此媒體追蹤器追蹤且使用指定標識符標記的所有圖像是否已完成載入。

如果此 load 標誌的值為 true,則此方法將開始載入任何尚未載入的圖像。

如果在載入或縮放圖像時出錯,則該圖像被視為已完成載入。使用 isErrorAnyisErrorID 方法檢查錯誤。

參數:
id - 要檢查的圖像標識符
load - 如果為 true,則開始載入任何尚未載入的圖像。
返回:
如果所有圖像都已完成載入、發生中止或出錯,則返回 true;否則返回 false
另請參見:
checkID(int, boolean), checkAll(), isErrorAny(), isErrorID(int)

isErrorID

public boolean isErrorID(int id)
檢查由此媒體追蹤器追蹤且具有指定標識符的所有圖像的錯誤狀態。

參數:
id - 要檢查圖像的標識符
返回:
如果具有指定標識符的任何圖像在載入期間出錯。則返回 true;否則返回 false
另請參見:
isErrorAny(), getErrorsID(int)

getErrorsID

public Object[] getErrorsID(int id)
返回具有出錯的指定 ID 的媒體列表。

參數:
id - 要檢查圖像的標識符
返回:
如果指定的標識符出錯,則返回此媒體追蹤器所追蹤媒體物件的陣列;如果沒有出錯,則返回 null
另請參見:
isErrorID(int), isErrorAny(), getErrorsAny()

waitForID

public void waitForID(int id)
               throws InterruptedException
開始載入由此媒體追蹤器追蹤且具有指定標識符的所有圖像。在完成載入具有指定標識符的全部圖像之前,此方法一直等待。

如果在載入或縮放圖像時出錯,則該圖像被視為已完成載入。使用 isErrorAnyisErrorID 方法檢查錯誤。

參數:
id - 要檢查圖像的標識符
拋出:
InterruptedException - 如果任何執行緒中止了此執行緒。
另請參見:
waitForAll(), isErrorAny(), isErrorID(int)

waitForID

public boolean waitForID(int id,
                         long ms)
                  throws InterruptedException
開始載入由此媒體追蹤器追蹤且具有指定標識符的所有圖像。在完成載入具有指定標識符的全部圖像之前,或在 ms 參數(以毫秒為單位)指定的時間到期之前,此方法一直等待。

如果在載入或縮放圖像時出錯,則該圖像被視為已完成載入。使用 statusIDisErrorIDisErrorAny 方法檢查錯誤。

參數:
id - 要檢查圖像的標識符
ms - 等待載入完成的時間長度(以毫秒為單位)
拋出:
InterruptedException - 如果任何執行緒中斷了此執行緒
另請參見:
waitForAll(), waitForID(int), statusID(int, boolean), isErrorAny(), isErrorID(int)

statusID

public int statusID(int id,
                    boolean load)
計算或返回由此媒體追蹤器追蹤且具有指定標識符的所有媒體狀態的按位

MediaTracker 類別定義的可能標誌有 LOADINGABORTEDERROREDCOMPLETE。尚未開始載入的圖像,其狀態值為零。

如果 load 值為 true,則此方法開始載入任何尚未載入的圖像。

參數:
id - 要檢查圖像的標識符
load - 如果為 true,則開始載入任何尚未載入的圖像
返回:
正在追蹤且具有指定標識符的所有媒體狀態的按位
另請參見:
statusAll(boolean), LOADING, ABORTED, ERRORED, COMPLETE

removeImage

public void removeImage(Image image)
從此媒體追蹤器移除指定的圖像。不管縮放比例和 ID 如何,所有指定圖像的實例都將被移除。

參數:
image - 要移除的圖像
從以下版本開始:
JDK1.1
另請參見:
removeImage(java.awt.Image, int), removeImage(java.awt.Image, int, int, int)

removeImage

public void removeImage(Image image,
                        int id)
從此媒體追蹤器的指定追蹤 ID 中移除指定的圖像。不管縮放比例如何,指定 ID 下的所有正在追蹤的 Image 實例都將被移除。

參數:
image - 要移除的圖像
id - 從其移除圖像的追蹤 ID
從以下版本開始:
JDK1.1
另請參見:
removeImage(java.awt.Image), removeImage(java.awt.Image, int, int, int)

removeImage

public void removeImage(Image image,
                        int id,
                        int width,
                        int height)
從此媒體追蹤器移除具有指定寬度、高度和 ID 的指定圖像。僅移除指定的實例(以及任何重複實例)。

參數:
image - 要移除的圖像
id - 從其移除圖像的追蹤 ID
width - 要移除的寬度(-1 為未縮放)
height - 要移除的高度(-1 為未縮放)
從以下版本開始:
JDK1.1
另請參見:
removeImage(java.awt.Image), removeImage(java.awt.Image, int)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only