2024年1月31日发(作者:)

***

基于Java的flash播放器

一、 设计思路首先我们来看看构造这个flash播放器要到达什么样的目的:flash播放器是一个菜单驱动的简单AWT应用。

flash播放器包含一个“文件〞菜单,文件菜单包含三个菜单项:

“翻开〞,用来翻开媒体文件(mp3)。

“循环〞,是播放一次〔默认〕,还是重复播放。

“退出〞,退出程序。

flash播放器可以在多种平台上运行。

flash播放器的核心功能通过JMF〔Java Media Framework〕API实现。JMF扩展了J2SE平台的多媒体才能,允许Java应用和Applet截取、回放、转换包括音频和视频在内的多种媒体。

二、初步设计

我们把这个媒体播放器的设计分成两个局部:GUI设计,伪代码设计。在GUI设计中,我们要理解构成程序的各个GUI部件。在伪代码设计中,我们用自然语言写出程序运行原理。

2.1 GUI设计

媒体播放器的用户界面包含一个主窗口、一个菜单和一个翻开文件的对话框。首先我们来看看主窗口的设计。主窗口应该把窗口标题显示为“简单flash播放器〞,显示“文件〞菜单。

“文件〞菜单包含三个菜单项。“翻开〞菜单显示一个对话框,用来选择媒体文件的位置。“循环〞菜单决定媒体文件只播放一次〔默认〕还是反复播放〔当菜单被选中〕。最后,“退出〞菜单关闭程序。另外,点击主窗口右上角的关闭按钮也可以关闭程序。请参见图二。

图二:“文件〞菜单

1

***

点击“文件/翻开〞菜单时,“翻开媒体文件〞对话框出现。选中媒体文件之后,点击“翻开〞按钮即可翻开媒体文件;点击“取消〞按钮中止文件翻开操作。如图三所示:

:“翻开媒体文件〞对话框

除了上面提到的部件之外,媒体播放器还包含一个视觉部件、一个控制面板部件。视觉部件顺序播放媒体文件包含的各帧图像;控制面板部件允许用户暂停、开场媒体文件的回放,或进展其他控制操作,例如查看媒体文件信息。

2.2 伪代码设计

前面我们理解了构成媒体播放器GUI的各个部件,下面要开场“设想〞一下这个程序的详细构造。在正式编写代码之前,我们先用伪代码的形式写出这个程序的运行过程,以后正式编写代码时只需把伪代码翻译成Java代码即可。下面给出了媒体播放器的伪代码描绘:

应用的类名称:Player

超类:Frame

监听器分类:动作事件,控制器事件,菜单项事件,绘图事件,窗口事件

main:

* 为Player对象分配内存。调Player构造函数,

2

***

创立主窗口〔同时,隐含地创立/启动了AWT后台线程〕

* 完毕主程序线程。此时AWT线程继续运行。flash构造函数:

* 设置主窗口的标题

* 注册窗口监听器,以处理窗口关闭事件

* 创立“文件〞菜单

* 创立“翻开〞菜单项

* 把Player对象注册成为“翻开〞菜单项动作事件的监听器

* 把“翻开〞菜单项参加“文件〞菜单。

* 在“文件〞菜单中参加一条程度分隔线

* 创立带检查框的“循环〞菜单项

* Player对象注册成为“循环〞菜单项事件的监听器

* 把“循环〞菜单项参加“文件菜单〞

* 在“文件〞菜单中参加一条程度分隔线

* 按照创立“翻开〞菜单项的过程,创立“退出〞菜单项

* 创立一个菜单条〔MenuBar〕

* 把“文件〞菜单参加到菜单条

* 把新创立的菜单条设置为主窗口的菜单条

* 显示主窗口

* 完毕构造函数

动作监听器:

当出现动作时:

* 假如动作事件起源于“退出〞菜单项,

* 触发一个给窗口监听器的窗口关闭事件

3

***

* 返回

* 创立一个“翻开媒体文件〞对话框

* 把对话框的当前目录设置为上次关闭时的目录

* 显示对话框。这个对话框是一个形式对话框

* 假如用户没有通过对话框选择媒体文件

* 返回

* 保存用户在对话框中选择的目录

* 假如以前已经创立JMF播放器对象

* 关闭该对象

创立播放图片菜单其中包含一个循环播放图片的菜单条

单击循环播放菜单条事件:会先停顿mp3的播放,单击最大化图标接着循环播放图片,在

循环播放图片的时候,可以单击播放菜单在播放图片时播放背景音乐。

* 根据指定的目录和名字,创立一个使用file:协议的媒体定位器〔MediaLocator〕对象,再利用该对象创立一个JMF播放器对象

* 假如出现异常

* 显示错误信息,然后返回

* 把主窗口的标题设置为媒体文件的名字

* 把Player对象注册为来自JMF播放器对象的控制器事件的监听器

* 让JMF播放器对象预先提取媒体内容

* 返回

控制器监听器:

当控制器被关闭:

* 假如JMF播放器的视觉部件存在,从Player容器撤除视觉部件

* 假如JMF播放器的控制面板部件存在,从Player容器撤除控制面板部件

4

***

* 返回

当媒体回放完毕:

* 假如“循环〞菜单被选中

* 复位JMF播放器对象的开场时间

* 让JMF播放器对象开场播放媒体

* 返回

当预提取媒体内容完毕:

* JMF播放器对象开场播放媒体

* 返回

当实例化〔realize〕完成:

* 获取JMF播放器对象的视觉部件

* 假如视觉部件存在,那么把它参加到Player容器的中间

* 获取JMF播放器对象的控制面板部件

* 假如控制面板部件存在,那么把它参加到player容器的南方

* 执行pack()操作

* 返回

菜单项监听器:

当菜单项状态改变:

* 切换“循环〞菜单被选中的状态

* 返回

绘画事件监听器:

paint()方法:

5

***

* 假如尚未装入媒体文件

* 获得主窗口的宽度和高度

* 用蓝色填充窗口内的区域

* 创立一种字体〔DialogInput/粗体〕,并将它设置为主窗口的字体

* 调用Frame超类的paint()方法,确保控制面板部件正确地画出

* 返回

update()方法:

* 调用paint()方法

* 返回

窗口监听器:

windowClosing:

* 调用dispose以执行windowClosed

* 返回

windowClosed:

* 假如已经创立JMF播放器对象

* 关闭JMF播放器对象

* 完毕程序

伪代码的前面三行声明了媒体播放器的类名称、超类的名称和Player类实现的监听器。带有main:前缀的行表示Player的 main()方法。类似地,带有“构造函数:〞前缀的行属于Player的构造函数。伪代码的其余内容分成五个监听器分区:动作监听器,控制器 监听器,菜单项监听器,绘图监听器,窗口监听器。每一个分区分别包含一个或多个方法。

三、编写代码

6