background image

义 Manager 类和 Player 接口等。本节中,我们主要学习 Manager 类和 Player 接口,其余的
javax.media 类放在后面的章节中。
  除了引入 javax.media 声明外,以上的代码片断引入了一些创建媒体播放器的输入的
声明。
  Player 接口
  在下面的代码片断中,创建一个公共类 SimpleAudioPlayer 并举例定义一个 Player 变
量:
  public class SimpleAudioPlayer {private Player audioPlayer = null;
  术语 Player 听起来由点熟悉,因为它是建立在我们公用的音频或者视频播放器的基
础上的。事实上,这个接口的例子就像是当作它们的真实的副本。Players 揭示了一个实体
上的媒体播放器(如立体音箱系统或者 VCR)涉及到功能上的方法。例如,一个 JMF 媒体播
放器可以开始和结束一个媒体流。在本节种,我们将使用 Player 的开始和结束功能。
  在一个文件上创建一个 Player
  使用 JMF 获得一个特定媒体文件的 Player 实例非常简单。Manager 类在 JMF 中如同一
个工厂制作许多的特殊接口类型,包括 Player 接口。因此,Manager 类的责任就是创建
Player 实例,如下例:
public

 

SimpleAudioPlayer(URL

 

url)

 

throws 

IOException,NoPlayerException,CannotRealizeException
{
audioPlayer = Manager.createRealizedPlayer(url);
}
public

 

SimpleAudioPlayer(File

 

file)

 

throws 

IOException,NoPlayerException,CannotRealizeException
{
this(file.toURL());

  如果你看完本节的代码,你可以注意到 Manager 类包含了创建一个 Player 实例的其
他方法。我们会研究其中的一些,如在后面的章节中的 DataSource 或者 MediaLocator 的实
例化。
  Player 的状态
  JMF 定义了大量的一个 Player 实例可能存在的不同状态。如下:
  · Prefetched
  · Prefetching
  · Realized
  · Realizing
  · Started
  · Unrealized
  使用这些状态
  因为使用媒体常常是资源非常密集的,由 JMF 对象揭示的许多方法都是不闭塞的,
允许一系列事件监听的状态改变的异步通知。例如,一个 Player 在它可以启动之前,必须
经过 Prefetched 和 Realized 状态。由于这些状态的改变都需要一些时间来完成,JMF 媒体
应用可以分配一个线程来初始化创建 Player 实例,然后再继续其他的操作。当 Player 准备
就绪的时候,它会通知应用程序其状态已经改变。
  在一个如同我们的这样简单的程序中,多功能性的类型并不是很重要。处于这个原因,