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); } } }
Modifier and Type | Field and Description |
---|---|
static int |
ABORTED
表示媒体的下载中止了。
|
static int |
COMPLETE
表示媒体下载成功的标志。
|
static int |
ERRORED
表示媒体的下载遇到错误的标志。
|
static int |
LOADING
指示媒体当前正在加载的标志。
|
Constructor and Description |
---|
MediaTracker(Component comp)
创建媒体跟踪器以跟踪给定组件的图像。
|
Modifier and Type | Method and Description |
---|---|
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)
计算并返回此媒体跟踪器跟踪的所有媒体状态的按位包含
OR 。
|
int |
statusID(int id, boolean load)
使用该媒体跟踪器跟踪的指定标识符计算并返回所有媒体状态的按位包含
OR 。
|
void |
waitForAll()
开始加载此媒体跟踪器跟踪的所有图像。
|
boolean |
waitForAll(long ms)
开始加载此媒体跟踪器跟踪的所有图像。
|
void |
waitForID(int id)
开始使用指定的标识符加载由此媒体跟踪器跟踪的所有图像。
|
boolean |
waitForID(int id, long ms)
开始使用指定的标识符加载由此媒体跟踪器跟踪的所有图像。
|
public static final int LOADING
public static final int ABORTED
public static final int ERRORED
public static final int COMPLETE
public MediaTracker(Component comp)
comp
- 最终将绘制图像的组件
public void addImage(Image image, int id)
image
- 要跟踪的图像
id
- 用于跟踪此图像的标识符
public void addImage(Image image, int id, int w, int h)
image
- 要跟踪的图像
id
- 可用于跟踪此图像的标识符
w
- 渲染图像的宽度
h
- 呈现图像的高度
public boolean checkAll()
如果图像尚未加载,则此方法不会启动加载。
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用isErrorAny
或isErrorID
方法检查错误。
true
如果所有图像已完成加载,已中止或遇到错误;
false
否则
checkAll(boolean)
,
checkID(int)
,
isErrorAny()
,
isErrorID(int)
public boolean checkAll(boolean load)
如果load
标志的值为true
,则此方法将开始加载任何尚未加载的映像。
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用isErrorAny
和isErrorID
方法检查错误。
load
- 如果
true
,开始加载任何尚未加载的图像
true
如果所有图像已完成加载,已中止或遇到错误;
false
否则
checkID(int)
,
checkAll()
,
isErrorAny()
,
isErrorID(int)
public boolean isErrorAny()
true
如果此媒体跟踪器跟踪的任何图像在加载期间出现错误;
false
否则
isErrorID(int)
,
getErrorsAny()
public Object[] getErrorsAny()
null
isErrorAny()
,
getErrorsID(int)
public void waitForAll() throws InterruptedException
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用isErrorAny
或isErrorID
方法检查错误。
InterruptedException
- 如果任何线程中断了此线程
waitForID(int)
,
waitForAll(long)
,
isErrorAny()
,
isErrorID(int)
public boolean waitForAll(long ms) throws InterruptedException
ms
参数的指定时间长度为毫秒为止。
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用isErrorAny
或isErrorID
方法检查错误。
ms
- 等待加载完成的毫秒数
true
如果所有图像都成功加载;
false
否则
InterruptedException
- 如果任何线程中断了此线程。
waitForID(int)
,
waitForAll(long)
,
isErrorAny()
,
isErrorID(int)
public int statusAll(boolean load)
由定义的可能标志MediaTracker
类是LOADING
, ABORTED
, ERRORED
和COMPLETE
。 尚未开始加载的图像的状态为零。
如果load
值为true
,则此方法将开始加载任何尚未加载的图像。
load
- 如果
true
,开始加载任何尚未加载的图像
statusID(int, boolean)
,
LOADING
,
ABORTED
,
ERRORED
,
COMPLETE
public boolean checkID(int id)
如果图像尚未加载,则此方法不会启动加载。
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用isErrorAny
或isErrorID
方法检查错误。
id
- 要检查的图像的标识符
true
如果所有图像已完成加载,已中止或遇到错误;
false
否则
checkID(int, boolean)
,
checkAll()
,
isErrorAny()
,
isErrorID(int)
public boolean checkID(int id, boolean load)
如果load
标志的值为true
,则此方法将开始加载任何尚未加载的映像。
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用isErrorAny
或isErrorID
方法检查错误。
id
- 要检查的图像的标识符
load
- 如果
true
,开始加载任何尚未加载的图像
true
如果所有图像已完成加载,已中止或遇到错误;
false
否则
checkID(int, boolean)
,
checkAll()
,
isErrorAny()
,
isErrorID(int)
public boolean isErrorID(int id)
id
- 要检查的图像的标识符
true
如果具有指定标识符的任何图像在加载期间有错误;
false
否则
isErrorAny()
,
getErrorsID(int)
public Object[] getErrorsID(int id)
id
- 要检查的图像的标识符
null
isErrorID(int)
,
isErrorAny()
,
getErrorsAny()
public void waitForID(int id) throws InterruptedException
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用isErrorAny
和isErrorID
方法来检查错误。
id
- 要检查的图像的标识符
InterruptedException
- 如果任何线程已经中断了这个线程。
waitForAll()
,
isErrorAny()
,
isErrorID(int)
public boolean waitForID(int id, long ms) throws InterruptedException
ms
参数的指定时间长度为毫秒为止。
如果在加载或缩放图像时出现错误,则该图像被认为已经完成加载。 使用statusID
, isErrorID
和isErrorAny
方法来检查错误。
id
- 要检查的图像的标识符
ms
- 等待加载完成的时间长度(以毫秒为单位)
InterruptedException
- 如果任何线程中断了此线程。
waitForAll()
,
waitForID(int)
,
statusID(int, boolean)
,
isErrorAny()
,
isErrorID(int)
public int statusID(int id, boolean load)
由定义的可能标志MediaTracker
类是LOADING
, ABORTED
, ERRORED
和COMPLETE
。 尚未开始加载的图像的状态为零。
如果load
值为true
,则此方法将开始加载任何尚未加载的图像。
id
- 要检查的图像的标识符
load
- 如果
true
,开始加载任何尚未加载的图像
statusAll(boolean)
,
LOADING
,
ABORTED
,
ERRORED
,
COMPLETE
public void removeImage(Image image)
image
- 要删除的图像
removeImage(java.awt.Image, int)
,
removeImage(java.awt.Image, int, int, int)
public void removeImage(Image image, int id)
Image
被删除,无论规模如何。
image
- 要删除的图像
id
- 从中删除图像的跟踪ID
removeImage(java.awt.Image)
,
removeImage(java.awt.Image, int, int, int)
public void removeImage(Image image, int id, int width, int height)
image
- 要删除的图像
id
- 从中删除图像的跟踪ID
width
- 要移除的宽度(对于unscaled为-1)
height
- 要移除的高度(-1)
removeImage(java.awt.Image)
,
removeImage(java.awt.Image, int)