- 所有已实现的接口:
-
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; // 获取背景图像(id == 0)和动画帧(id == 1)的图像,并将它们添加到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); } } // 启动动画线程 public void start() { animator = new Thread(this); animator.start(); } // 停止动画线程 public void stop() { animator = null; } // 运行动画线程 // 首先等待背景图像完全加载和绘制。然后等待所有动画帧完成加载。最后,循环并递增动画帧索引。 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(); } } // 背景图像填充整个框架,因此在重绘时不需要清除小程序。只需调用paint方法。 public void update(Graphics g) { paint(g); } // 如果加载图像时出现任何错误,则绘制一个大红色矩形。否则始终绘制背景,以便在加载时逐步显示。最后,仅在所有帧(id == 1)完成加载时才绘制当前动画帧,以避免部分动画。 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 Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
将图像添加到此媒体跟踪器正在跟踪的图像列表中。void
将缩放图像添加到此媒体跟踪器正在跟踪的图像列表中。boolean
checkAll()
检查此媒体跟踪器正在跟踪的所有图像是否已完成加载。boolean
checkAll
(boolean load) 检查此媒体跟踪器正在跟踪的所有图像是否已完成加载。boolean
checkID
(int id) 检查此媒体跟踪器正在跟踪的具有指定标识符的所有图像是否已完成加载。boolean
checkID
(int id, boolean load) 检查此媒体跟踪器正在跟踪的具有指定标识符的所有图像是否已完成加载。Object[]
返回遇到错误的所有媒体的列表。Object[]
getErrorsID
(int id) 返回遇到错误的具有指定ID的媒体的列表。boolean
检查所有图像的错误状态。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
开始加载此媒体跟踪器跟踪的所有图像。boolean
waitForAll
(long ms) 开始加载此媒体跟踪器跟踪的所有图像。void
waitForID
(int id) 开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。boolean
waitForID
(int id, long ms) 开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。
-
Field Details
-
LOADING
public static final int LOADING表示媒体当前正在加载的标志。- 参见:
-
ABORTED
public static final int ABORTED表示媒体下载被中止的标志。- 参见:
-
ERRORED
public static final int ERRORED表示媒体下载遇到错误的标志。- 参见:
-
COMPLETE
public static final int COMPLETE表示媒体下载成功完成的标志。- 参见:
-
-
Constructor Details
-
MediaTracker
创建一个媒体跟踪器来跟踪给定组件的图像。- 参数:
-
comp
- 最终将在其上绘制图像的组件
-
-
Method Details
-
addImage
将图像添加到此媒体跟踪器正在跟踪的图像列表中。该图像最终将以其默认(未缩放)大小呈现。- 参数:
-
image
- 要跟踪的图像 -
id
- 用于跟踪此图像的标识符
-
addImage
将缩放图像添加到此媒体跟踪器正在跟踪的图像列表中。该图像最终将以指定的宽度和高度呈现。- 参数:
-
image
- 要跟踪的图像 -
id
- 可用于跟踪此图像的标识符 -
w
- 图像呈现的宽度 -
h
- 图像呈现的高度
-
checkAll
public boolean checkAll()检查此媒体跟踪器正在跟踪的所有图像是否已完成加载。如果图像尚未加载,则此方法不会开始加载图像。
如果在加载或缩放图像时出现错误,则认为该图像已完成加载。使用
isErrorAny
或isErrorID
方法检查错误。- 返回:
-
true
表示所有图像已完成加载、已中止或遇到错误;否则为false
- 参见:
-
checkAll
public boolean checkAll(boolean load) 检查此媒体跟踪器正在跟踪的所有图像是否已经加载完成。如果
load
标志的值为true
,则此方法开始加载尚未加载的任何图像。如果在加载或缩放图像时出现错误,则认为该图像已经加载完成。使用
isErrorAny
和isErrorID
方法来检查错误。- 参数:
-
load
- 如果为true
,则开始加载尚未加载的任何图像 - 返回:
-
如果所有图像已经加载完成、已中止或遇到错误,则返回
true
;否则返回false
- 参见:
-
isErrorAny
public boolean isErrorAny()检查所有图像的错误状态。- 返回:
-
如果此媒体跟踪器跟踪的任何图像在加载过程中出现错误,则返回
true
;否则返回false
- 参见:
-
getErrorsAny
返回遇到错误的所有媒体列表。- 返回:
-
返回由此媒体跟踪器跟踪的遇到错误的媒体对象数组,如果没有错误则返回
null
- 参见:
-
waitForAll
开始加载此媒体跟踪器跟踪的所有图像。此方法将等待所有正在跟踪的图像加载完成。如果在加载或缩放图像时出现错误,则认为该图像已经加载完成。使用
isErrorAny
或isErrorID
方法来检查错误。- 抛出:
-
InterruptedException
- 如果任何线程中断了此线程 - 参见:
-
waitForAll
开始加载此媒体跟踪器跟踪的所有图像。此方法将等待所有正在跟踪的图像加载完成,或者直到ms
参数指定的毫秒数已过。如果在加载或缩放图像时出现错误,则认为该图像已经加载完成。使用
isErrorAny
或isErrorID
方法来检查错误。- 参数:
-
ms
- 等待加载完成的毫秒数 - 返回:
-
如果所有图像成功加载,则返回
true
;否则返回false
- 抛出:
-
InterruptedException
- 如果任何线程中断了此线程 - 参见:
-
statusAll
public int statusAll(boolean load) 计算并返回此媒体跟踪器跟踪的所有媒体的状态的按位包含OR。MediaTracker
类定义的可能标志包括LOADING
、ABORTED
、ERRORED
和COMPLETE
。尚未开始加载的图像其状态为零。如果
load
的值为true
,则此方法开始加载尚未加载的任何图像。- 参数:
-
load
- 如果为true
,则开始加载尚未加载的任何图像 - 返回:
- 所有正在跟踪的媒体状态的按位包含OR
- 参见:
-
checkID
public boolean checkID(int id) 检查此媒体跟踪器正在跟踪的所有带有指定标识符的图像是否已经加载完成。如果图像尚未加载,则此方法不会开始加载图像。
如果在加载或缩放图像时出现错误,则认为该图像已经加载完成。使用
isErrorAny
或isErrorID
方法来检查错误。- 参数:
-
id
- 要检查的图像的标识符 - 返回:
-
如果所有图像已经加载完成、已中止或遇到错误,则返回
true
;否则返回false
- 参见:
-
checkID
public boolean checkID(int id, boolean load) 检查此媒体跟踪器正在跟踪的所有带有指定标识符的图像是否已经加载完成。如果
load
标志的值为true
,则此方法开始加载尚未加载的任何图像。如果在加载或缩放图像时出现错误,则认为该图像已经加载完成。使用
isErrorAny
或isErrorID
方法来检查错误。- 参数:
-
id
- 要检查的图像的标识符 -
load
- 如果为true
,则开始加载尚未加载的任何图像 - 返回:
-
如果所有图像已经加载完成、已中止或遇到错误,则返回
true
;否则返回false
- 参见:
-
isErrorID
public boolean isErrorID(int id) 检查此媒体跟踪器跟踪的所有带有指定标识符的图像的错误状态。- 参数:
-
id
- 要检查的图像的标识符 - 返回:
-
如果带有指定标识符的任何图像在加载过程中出现错误,则返回
true
;否则返回false
- 参见:
-
getErrorsID
返回遇到错误的具有指定ID的媒体列表。- 参数:
-
id
- 要检查的图像的标识符 - 返回:
-
返回由此媒体跟踪器跟踪的具有指定标识符的媒体对象数组,如果没有错误则返回
null
- 参见:
-
waitForID
开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。此方法将等待具有指定标识符的所有图像加载完成。如果在加载或缩放图像时出现错误,则认为该图像已经加载完成。使用
isErrorAny
和isErrorID
方法来检查错误。- 参数:
-
id
- 要检查的图像的标识符 - 抛出:
-
InterruptedException
- 如果任何线程中断了此线程 - 参见:
-
waitForID
开始加载此媒体跟踪器跟踪的具有指定标识符的所有图像。此方法将等待具有指定标识符的所有图像加载完成,或者直到ms
参数指定的毫秒数已过。如果在加载或缩放图像时出现错误,则认为该图像已经加载完成。使用
statusID
、isErrorID
和isErrorAny
方法来检查错误。- 参数:
-
id
- 要检查的图像的标识符 -
ms
- 等待加载完成的毫秒数 - 返回:
-
如果加载在指定时间内完成,则返回
true
;否则返回false
- 抛出:
-
InterruptedException
- 如果任何线程中断了此线程 - 参见:
-
statusID
public int statusID(int id, boolean load) 计算并返回此媒体跟踪器跟踪的具有指定标识符的所有媒体的状态的按位包含OR。MediaTracker
类定义的可能标志包括LOADING
、ABORTED
、ERRORED
和COMPLETE
。尚未开始加载的图像其状态为零。如果
load
的值为true
,则此方法将开始加载尚未加载的任何图像。- 参数:
-
id
- 要检查的图像的标识符 -
load
- 如果为true
,则开始加载尚未加载的任何图像 - 返回:
- 正在被跟踪的具有指定标识符的所有媒体的状态的按位包含OR
- 另请参阅:
-
removeImage
从此媒体跟踪器中移除指定的图像。无论比例或ID如何,都会移除指定图像的所有实例。- 参数:
-
image
- 要移除的图像 - 自版本:
- 1.1
- 另请参阅:
-
removeImage
从此媒体跟踪器的指定跟踪ID中移除指定的图像。无论比例如何,都会移除指定ID下正在跟踪的所有Image
实例。- 参数:
-
image
- 要移除的图像 -
id
- 要从中移除图像的跟踪ID - 自版本:
- 1.1
- 另请参阅:
-
removeImage
从此媒体跟踪器中移除具有指定宽度、高度和ID的指定图像。仅移除指定实例(包括任何重复项)。- 参数:
-
image
- 要移除的图像 -
id
- 要从中移除图像的跟踪ID -
width
- 要移除的宽度(-1表示未缩放) -
height
- 要移除的高度(-1表示未缩放) - 自版本:
- 1.1
- 另请参阅:
-