2023年7月11日发(作者:)
[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
重庆大学
课程设计说明书
题目: Java程序设计之课程设计
院 系: 计算机学院
专业班级: 计算机科学与技术4班
学 生: 代金龙(20065231)
程 飞(20065265)
王小东(2006 )
指导教师: 李芝兴
2009 年 1月 6 日
目 录
1、学生成绩评定表………………………………………………3
2、课程设计任务说明书…………………………………………6
3、需求分析………………………………………………………7
4、程序设计过程…………………………………………………7
4.1 实验原理…………………………………………………7
4.2 程序设计图………………………………………………12
4.3 核心代码…………………………………………………13
5、实验结果………………………………………………………23
6、总结分析………………………………………………………23
8、参考文献………………………………………………………23
第1页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
课程设计指导教师评定成绩表
姓名:代金龙 学号:20065231
项目
优秀
分值
(100>x≥90)
参考标准
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
有重大改进或独特见解,有一定实用价值
良好
(90>x≥80)
参考标准
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
中等(80>x≥70)
参考标准
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
及格
(70>x≥60)
参考标准
学习态度尚可,能遵守组织纪律,能按期完成任务
不及(x<60)
参考标准
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
格评分
学习态度
15
技水与际力
术平实能25
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,
理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解 观念陈旧
第2页
[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名: 年 月 日
课程设计指导教师评定成绩表
姓名:程飞 学号:20065265
项目
优秀
分值
(100>x≥90)
参考标准
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
有重大改进或独特见解,有一定实用价值
良好
(90>x≥80)
参考标准
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
中等(80>x≥70)
参考标准
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
及格
(70>x≥60)
参考标准
学习态度尚可,能遵守组织纪律,能按期完成任务
不及(x<60)
参考标准
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
格评分
学习态度
15
技水与际力
术平实能25
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,
理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解 观念陈旧
第3页
[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名: 年 月 日
课程设计指导教师评定成绩表
姓名:王小东 学号:2006
项目
优秀
分值
(100>x≥90)
参考标准
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
有重大改进或独特见解,有一定实用价值
良好
(90>x≥80)
参考标准
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
中等(80>x≥70)
参考标准
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
及格
(70>x≥60)
参考标准
学习态度尚可,能遵守组织纪律,能按期完成任务
不及(x<60)
参考标准
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
格评分
学习态度
15
技水与际力
术平实能25
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,
理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解 观念陈旧
第4页
[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名: 年 月 日
课程设计任务说明书
课程设计题目
学院
Java程序设计之课程设计
专业 计算机科学与技术 年级
2006
计算机学院
实验教学的目的、任务与要求
Java程序设计是计算机网络工程专业一门重要的专业必修课。为了进一步巩固课堂上所学到的知识,深刻把握Java技术的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设Java程序设计的课程设计。
课程设计的任务是完成课程设计内容,写出课程设计报告。
要求学生掌握:
掌握Java的语言规范,面向对象的核心概念和特性;
掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等;
掌握Java应用软件的开发环境和开发过程;
掌握基于Jsp网站的开发环境和开发过程;
掌握面向对象的思想和程序设计方法。
学生应完成的工作:
分组 3~4人/组
内容:java版视频播放器
语言:Java
具体设计内容及要求:
对视频文件的正确播放;
能够实现对视频播放的控制,如暂停,播放,快进,快退,上一个,下一个等功能;
能够进行文件视频的选择,全屏,音量的控制,拖动,播放模式的控制等;
其它的一些提示信息或附加功能。
第5页
[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
目前资料收集情况(含指定参考资料):
《Java程序设计之网络编程》, 李芝兴编,清华大学出版社,出版时间2006年3月
(美)Cay ann,Gary Cornell编,《Java2 核心技术第6版:基础知识》,机械工业出版社,出版时间 2003年10月
(美)Bruce Eckel编,《Java编程思想第2版》,机械工业出版社,出版时间2002年9月
《JMF入门指南》,网络下载。
课程设计的工作计划:
1.需求分析(说明系统目的,要求,操作流程,开发工具与开发平台)
2.总体设计(描述系统功能,系统架构,模块化分)
3.详细设计(建立系统的数据结构,协议结构,数据流程图)
4.系统实现编码(用所选开发工具完成应用系统)
任务下达日期 2008 年 12 月 24 日
指导教师 (签名)
完成日期 2009 年 1 月 6 日
学 生 (签名)
选题
利用java JMF编制一个能播放mpeg,mpg,mov等格式的视频播放器;要求能够进行播放文件的选择,文件列表框中陈列选择的视频文件,能够控制视频的播放,退出,停止,快进,快退,下一个,上一个,音量的控制,静音控制,全屏选择,任意改变播放视频界面大小等功能。
3.需求分析
3.1任务目的:
1.实现视频文件的正确播放;
2. 能够实现对视频播放的控制,如暂停,播放,快进,快退,上一个,下一个等功能;
3.能够进行文件视频的选择,全屏,音量的控制,拖动,播放模式的控制等;
4.任意改变播放视频界面大小等功能。
要求学生掌握:
掌握Java的语言规范,面向对象的核心概念和特性。
掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等。
掌握Java应用软件的开发环境和开发过程
掌握基于Jsp网站的开发环境和开发过程
掌握面向对象的思想和程序设计方法。
3.2程序的设计、调试、运行的软件环境:
操作系统:Windows XP(SP2)
数据库及数据库管理软件:SQL Server 2000
JDK环境:Java SE Development Kit(JDK)Version 6
开发工具:Eclipse3.2
运行平台:Windows、Linux各个版本、MAC等任何平台
运行环境:Java SE Runtime Environment(JRE)Version
4.程序设计过程
第6页
[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
4.1实验原理
JMF提供了一个平台无关的框架来呈现时基媒体(time-based media)。JavaMediaPlayerAPI的设计目标是支持多种标准的媒体格式,包括MPEG-1,MPEG-2,QuickTime,AVI,WAV,AU和MIDI.使用JMF,可以同步呈现不同来源的时基媒体。
现有的一些媒体播放器都严重依赖原生码来执行解压缩、渲染 等 计算密集型任务。而JMF
API则隐藏了具体实现,只提供抽象的编程接口。
举例来说,一个用JMF制作的播放器,具体运行的过程中可能会调用到操作系统的本地方法,但开发者写代码时可以无视本地方法的存在。
JMF Player API :
接入不同的协议和分发(传输)机制
接入不同的媒体数据类型
定义事件模型,用于Player和应用程序间的异步通信
4.1.1数据源(Data Source)
一个DataSource 封装了媒体的地址、协议和分发的软件。一个JavaMediaPlayer包含一个DataSource。一旦创建,这个DataSource不能被用于其他媒体的传输。 一个Player的数据源可以用MediaLocator或URL来标示。
MdiaLocator(媒体定位器)是一个JMF类,用来描述Player播放的媒体。MediaLocator与URL类似,并且可以从URL来创建。他们的区别在于,在Java中,URL只有其协议是已知协议时才能被创建,而MediaLocator则没有这个限制。
Java 媒体播放器可以播放来自多种数据源的媒体数据,包括本地、网络文件和实时广播等。
JMF支持两种不同的数据源。
Pull Data-Source (数据源被动的被获取)-由客户端发起数据传输并控制数据流,已知的协议包括HTTP(超文本传输协议)和本地文件。
Push Data-Source (数据源主动推送)-由服务器发起数据传输并控制推送数据流。此类数据源包括广播媒体,多点传送的媒体和VOD(视频点播)。
客户端程序所能够控制的度量,取决于媒体源的类型。举个例子说,MPEG文件可以被重定位(reposition),那么播放MPEG的客户端程序就可以允许用户重播或者跳进至一个新时间点;而由服务器段控制的广播媒体则不能被重定位;另外VOD协议则支持有限的用户操作,比如一个VOD客户端程序可以允许用户跳进至新位置,但不能快进和快倒。
4.1.2 Players
一个Java Media Player是一个对象。她基于时间来处理数据流,从DataSource读取数据并在确切的时间点渲染媒体。一个Java Media Player必须实现Player interface.
Clock定义了基本的计时和同步操作, 她被Player 用来控制媒体的呈现。
Controller继承Clock对外提供提供如下方法:
管理系统资源
预载数据
提供监听机制(Observable),对外发送媒体事件通知
Duration提供了检测媒体时长的途径。
Player支持标准的用户控制,并放宽了来自于Clock的一些操作限制。
多个Player共享一个公共的计时和同步模型。一个Player的媒体时间表示了媒体流的当前位置。每一个Player有一个TimeBase。TimeBase定义了Player的时间流逝。当一个Player 被执行start,他的媒体时间会被映射到time-base时间。如多个媒体要同步,那么他们必须使用同一个TimeBase.
第7页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
一个Player的用户界面可以包含一个可视组件和一个控制面板组件(control- panel
component)。我们用的时候可以选择实现一个自定义的用户界面,或者使用Player的默认的控制面板组件。
一般来说,一个Player在能够呈现媒体之前,必须先执行一序列的操作。而这些操作有可能会耗费一定的时间,所以JMF定义了一些操作状态,并且提供了状态转换的操作机制。
4.1.3 Media Events
JMF事件报告机制允许我们的程序响应媒体驱动的错误,比如数据丢失或资源不可用。事件系统同时也提供了重要的通知协议;当我们的程序调用一个Player的异步方法时,只有当收到响应的事件消息时,才能确认操作是否完成。
有两种JMF对象会抛出事件,他们是: GainControl对象 和 Controller 对象。 对于事件,
GainControl和 Controller 遵循Java Beans 形式。
GainControl对象只抛出一种类型的事件- GainChangeEvent。我们通过实现
GainChangeListener interface来响应gain(增益?)的变化。
Controller则会抛出多种派生自 ControllerEvent的事件。我们通过实现 ControllerListener
interface 来接收诸如Player的Controller抛出的事件消息。
下图显示了Controller抛出的各种事件类型:
ControllerEvents 可分为三类:改变通知、关闭事件和转换事件
变化通知(Change notification events)诸如 RateChangeEvent 和 DurationUpdateEvent。他们表示Player的一些属性数值发生了变化。这类事件通常是对一些方法调用的回馈。例如, 一个Player的setRate方法被调用,他会抛出一个 RateChangeEvent.
转换事件(TransitionEvents) 让我们的程序能够响应Player的状态变化。 当Player从一个状态转换到另一个状态时,就会抛出一个转换事件。 (在1.4中,我们会提供更多的关于Player状态的信息)
当player关闭时,则会抛出关闭事件(ControllerClosedEvents)。当一个Player不再可用时,抛出 ControllerClosedEvent. ControllerErrorEvent(控制器错误事件)则是关闭事件的一个特例。我们写程序时,通过监听控制器错误事件,可以对Player故障作出响应,从而增进用户体验。
4.1.4 Player States
JavaMediaPlayer有6种状态。Clock 接口定义了两种主要的状态:Stopped和Started。
在普通操作中,Plyaer在到达Started状态前,会逐个通过上图中的每一个状态。
Unrealized(未实现) 状态表示Player已经被实例化,但还不知道媒体的任何信息。当Player第一次被创建,他的状态就是Urealized。
Player的realize方法被调用后,会从Unrealized转入Realizing(实现中)状态。这时的Player应该正在检测资源需求。在relization过程中,Player会获取只需加在一次的资源。这些资源包括非独享的渲染资源。(独享资源指的受限的资源。例如只能被一个播放器使用的个别硬件资源,此类资源会在预取(Prefetching)的过程中加载。) Realizing中的Player常常通过网络下载东西。
Player结束Realizing状态后,会转入 Realized(已实现)状态。这个状态下,Player会知道他需要哪些资源,还知道媒体的类型信息。因为Realized Player知道怎样渲染数据,所以他能够提供可视组件和控件。此时 ,Player与其他系统对象的连接已经就位,但此时还不会占用任何会阻止其他Player启动的资源。
Prefetch被调用后,Player会从Realized状态转入Prefetching(预取中)状态。此时播放器在为呈现媒体作准备,包括调用媒体数据、获取独享资源 和其他一些准备工作。在媒体呈现过程中,一些操作可能会导致 Prefetching状态 重现,例如重新定位播放位置、播放器请
第8页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
开始
:
对
象
实
例
求额外的缓冲区等。
当Player 结束预取,将转入 Prefetched( 预取完成 ) 状态。此时Player 已经准备开始播放但尚为实际开始。
调用start方法将使Player转入Started状态。此时,Player的媒体时间被映射到time-base时间,并且clock开始运行。此时播放器有可能会等待一个恰当的时间来呈现媒体数据。
当player从一个状态转入另一个状态时,会抛出 TransitionEvents(转换事件),我们可以通过实现 ControllerListener接口来监听这些时间并作出恰当的响应。
当播放器开始Realizing和Prefetching的时候,我们可以使用事件报告机制对Player进行管理,在调用Player方法之前,我们可以先检查Player状态,在作出恰当的操作。
4.1.5 Calling JMF Methods 调用JMF方法时的一些约定
JMF对于errors(错误)和exceptions(异常)作如下约定。
Java Media Errors 是当程序调用了一个当前状态下非法的方法时抛出的。Errors是在外部程序有控制权的状态下执行了非法的请求而抛出的。举例来说,调用一个处于Started的Player的方法时抛出的就是error。开发者有责任在调用方法前确认Player已被停止。JMF error是可以通过优化代码来避免的,应用程序不应该捕获JMF errors, 好的应用程序不会碰到这些错误。
Java Media Exceptions是当程序调用了不能完成的方法或在当前状态下不适用的方法。Exceptions是在外部程序没有控制权的状态下抛出的。例如当我们试图同步两个time-base不匹配的Player时,就会抛出异常。之所以是异常而不是错误,是因为我们无从检测time-base是否匹配,是无法预期的。
有时,JMF的一些方法会返回非预期的结果,通过检查返回直,我们可以检测实际发生的事情:
我们可以通过返回直检查实际被设置的数值,例如:并不是所有的播放器都可以每周期5次的速率呈现媒体数据,如果我们调了setRate(5.0),播放器将会设置一个合法的近似直,这个数值可能是5.0也可能是1.0,我们需要检查返回数据来确认被设置的数据。
有时,我们请求的信息是不可用的。例如:Player在播完一个媒体之前,可能不知道媒体的时长,这时如果我们调了getDuration(),getDuration会返回 DURATION_UNKNOWN.当媒体被播放完一次,再调getDuration时,则会返回正确的时长。
4.2 程序设计图
界面级相关组件设置与初进行相关的组件添加,关联,
始化方法:
List中右击鼠标事件处理,弹出选择操作菜单:mousePressed();
贴图等初始化工作
List中双击鼠标事件处理,开始播放选中文件:mouseClicked();
setComponentProperty()
List列表框中鼠标事件监单击List中从列表删除事件:menuItem_seListener();
听及处理方法:单击List中播放暂停事件:menuItem_seListener();
addPlayListListener()
单击List中向列表中添加事件:menuItem_seListener();
单击List中清除播放列表事件:menuItem_seListener();
左键单击播放暂停按钮事件处理:but_ionListener();
左键单击停止按钮事件处理:but_ionListener();
界面上控制按钮单击事件
左键单击上一个按钮事件处理:but_ionListener();
左键单击下一个按钮事件处理:but_ionListener();
监听及处理方法:左键单击快退按钮事件处理:but_ionListener();
addPlayBottonListener()
左键单击快进按钮事件处理:but_ionListener();
左键单击静音按钮事件处理:but_ionListener();
左键单击文件按钮事件处理:seListener();
左键单击单曲播放按钮事件处理:single_seListener();
左键单击单曲循环按钮事件处理:single_seListener();
构
对菜单条的鼠标事件监造左键单击循环播放按钮事件处理: loop_seListener();
左键单击随机播放按钮事件处理: random_seListener();
听及处理方法:左键单击播放暂停按钮事件处理:ionListener();
函addPlayMenuListener()
数
左键单击停止按钮事件处理:ionListener();
调
第9页
用
成员[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
左键单击打开按钮事件处理:ionListener();
左键单击退出按钮事件处理:ionListener();
左键单击关于按钮事件处理:ionListener();
左键单击帮助按钮事件处理:help_.addActionListener();
单击播放暂停按钮事件处理:menuItem_ionListener();
单击停止按钮事件处理:menuItem_ionListener();
对播放界面上播放视频时
单击快进按钮事件处理:menuItem_ionListener();
右击事件监听及处理方法:addRightClickListener()
单击快退按钮事件处理:menuItem_ionListener();
单击退出按钮事件处理:menuItem_ionListener();
对播放视频时改变窗体大
pnentLister();
小事件监听及处理方法:
对用户拖动进度条事件监
Jslider_seLiatener()听及处理方法:
初始化播放器,准备开始播startPlayer(String mediaLocation);
放视频文件:
一个内部类进行视频文件
class PlayerEventHandler extends ControllerAdapter ;
的相关操作:
4.3 核心代码:
/******************************************************/
public ppp(String s){ //构造函数
super(s);
setComponentProperty();
addPlayListListener();
addPlayButtonListener();
addPlayMenuListener();
addRightClickListener();
addFrameChangeListener();
第10页
[键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字]
} //构造函数结束
/******************************************************/
public void addPlayListListener(){ //对list列表中鼠标事件进行监听并处理
seListener(new MouseAdapter(){ //list列表监听事件
public void mousePressed(MouseEvent e) {
//ressed(e);
n(ifiers());//通过这个函数返回值区分是单击还是双击
int mods = ifiers();
if (mods==4){ //4时为右击
(menuItem_playSelect);
(menuItem_delete);
(menuItem_Addfile);
(menuItem_deleteAll);
(list, (), ());
}
}
public void mouseClicked(MouseEvent e){
if(ckCount()==2){ //在列表框中双击事件
for(int i=0;i if((i).toString().endsWith(ectedValue().toString())) try { startPlayer((i).toURL().toString()); //开始播放选中文件 but_n(new ImageIcon("")); play_temp = true; IsPlaying = true; break; } catch (MalformedURLException E) { tackTrace(); } } } }); menuItem_seListener(new MouseAdapter(){ //单击list中“从列表中删除”事件 public void mousePressed(MouseEvent e) { Element(ectedValue()); Element(ectedValue()); 第11页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] Element(ectedValue()); } }); menuItem_seListener(new MouseAdapter(){ //单击list中“播放选中文件”事件 public void mousePressed(MouseEvent e) { try { for(int i=0;i if((i).toString().endsWith(ectedValue().toString())) { startPlayer((i).toURL().toString()); n((i).toURL().toString()); but_n(new ImageIcon("pause_.png")); play_temp = true; IsPlaying = true; } } catch(MalformedURLException e1) { tackTrace(); } } }); menuItem_seListener(new MouseAdapter(){ //单击list中“向列表中添加”事件 public void mousePressed(MouseEvent e) { JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器 tiSelectionEnabled(true); //可以同时选中多个文件 eFilter(new MyFileFilter()); //设置文件选择时选择的文件的默认类型 enDialog();//显示对话框 File[] mediaFiles= ectedFiles(); //得到选择的文件 for(int i=0;i<;i++){ (mediaFiles[i]); (mediaFiles[i].getName()); ment(mediaFiles[i].getName()); String path="file:/"+mediaFiles[i].getPath(); //必须加"file:/"才能播放选中的文件 第12页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] n(path); startPlayer(path); but_n(new ImageIcon("")); play_temp = true; IsPlaying = true; } } }); menuItem_seListener(new MouseAdapter(){ //单击list中“清除播放列表”事件 public void mousePressed(MouseEvent e) { AllElements(); AllElements(); AllElements(); } }); } /******************************************************/ public void addPlayMenuListener(){ //对菜单条的鼠标事件进行处理 seListener(new MouseAdapter(){ public void mousePressed(MouseEvent e) { //(open); //(exit); //(open); //(exit); } }); single_ionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { isSingle_play=true; isSingle_loop=false; isLoop_play=false; isRandom_play=false; } }); single_ionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { isSingle_play=false; isSingle_loop=true; isLoop_play=false; isRandom_play=false; 第13页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] } }); loop_ionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { isSingle_play=false; isSingle_loop=false; isLoop_play=true; isRandom_play=false; } }); random_ionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { isSingle_play=false; isSingle_loop=false; isLoop_play=false; isRandom_play=true; } }); random_ected(true);//默认为随机播放 ionListener(new ActionListener(){ //播放暂停按钮事件处理 public void actionPerformed(ActionEvent event) { if(player==null){ n("你没有开始播放任何文件"); return; } if (play_temp) { (); but_n(new ImageIcon("pause_.png")); play_temp = false; } else { (); but_n(new ImageIcon("play_.png")); play_temp = true; } } }); ionListener(new ActionListener(){ //单击停止按钮事件处理 public void actionPerformed(ActionEvent event) { if(player==null){ 第14页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] n("你没有开始播放任何文件"); return; } if(timeThread !=null) ();//不做这一步jslider_progress还会变化 (); (); panel_(visualMedia);//不做这一步看不到gif图画 jslider_ue(0); } }); ionListener(new ActionListener() { //打开文件按钮事件处理 //@SuppressWarnings("deprecation") public void actionPerformed(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器 eSelectionMode(_AND_DIRECTORIES);//设置文件打开模式为仅打开文件 int result = enDialog();//显示对话框 if (result == E_OPTION) { //得到用户行为 mediaFile = ectedFile(); //得到选择的文件 (ectedFile()); (ectedFile().getName()); ment(ectedFile().getName()); ectedValue(ectedFile().getName(), true); } if (mediaFile != null) { try { startPlayer(().toString());//转换成URL后再转换成字符串才行 } catch (MalformedURLException e) { tackTrace(); } //开始播放打开的文件 } } }); ionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { (0); } }); 第15页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] ionListener(new ActionListener(){ //打开关于按钮事件处理 public void actionPerformed(ActionEvent event) { JFrame f = new JFrame("Message"); nds(520, 400, 400, 100); //设置jframe显示的位置,长宽 Container container=tentPane(); out(null); JTextArea jTextArea = new JTextArea("Java视频播放器原始版"); String string="n"+"组员:程飞(20065265),代金龙(20065231)"; (string); nds(0, 0, 400, 70); table(false); //设置文本为只读的 (jTextArea); ible(true); } }); help_.addActionListener(new ActionListener(){ //打开关于按钮事件处理 public void actionPerformed(ActionEvent event) { JFrame f = new JFrame("Message"); nds(520, 400, 400, 150); //设置jframe显示的位置,长宽 Container container=tentPane(); out(null); JTextArea jTextArea = new JTextArea("使用说明n"); String string="各个按钮的具体功能:"+"n"+"1.双击屏幕全屏,再次双击回到原来大小"+"n"+"2.双击播放列表文件可直接播放" +"n"+"3.右击播放列表可添加或删除列表"; (string); nds(0, 0, 400, 150); table(false); //设置文本为只读的 (jTextArea); ible(true); } }); } /******************************************************/ public void addFrameChangeListener(){ //对改变窗体大小事件进行处理 ponentListener(new ComponentAdapter(){//处理窗体大小改变时其它组建跟随改变 public void componentResized(ComponentEvent e){ int WIDTH= getWidth(); int HEIGHT=getHeight(); panel_nds(0,0,WIDTH-140, HEIGHT-125); panel_nds(WIDTH-140,0,140, HEIGHT-125); 第16页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] panel_nds(0,HEIGHT-125,WIDTH, 125); jslider_e(WIDTH, 20); } }); } /******************************************************/ public void startPlayer(String mediaLocation) { timeThread=new ControlProgrecess();//一个线程管理进度条.(写在这里可以使得以任意一种方法播放视频时都可以与进度条相关联) (); if (player != null) //如果播放器非空则移去先前的播放器组件 if (visualMedia != null) panel_(visualMedia); //如果对象visualMedia非空则移去 if (mediaControl != null) { panel_(mediaControl); //如果对象mediaControl非空则移去 (); //关闭播放器 } MediaLocator mediaLocator = new MediaLocator(mediaLocation); //媒体定位器 if (mediaLocator == null) { n("打开文件错误"); //显示错误信息 return; } try { player = Player(mediaLocator); //得到播放器实例 trollerListener(new PlayerEventHandler()); //增加播放控制器 e(); } catch (Exception ex) { tackTrace(); n("打开错误"); //显示错误信息 } } /******************************************************/ //处理声音的开/关及进度条的拖动事件 public void stateChanged(ChangeEvent e) { if(rce()==jslider_sound) nControl().setLevel((float)jslider_ue()/100); if(rce()==jslider_progress){ if (player != null) { controlSliderTime(); } } } /******************************************************/ 第17页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] private class PlayerEventHandler extends ControllerAdapter { //一个内部类来进行视频文件的相关操作 public void realizeComplete(RealizeCompleteEvent realizeDoneEvent) { ch(); //预取媒体数据 } //完成预取媒体数据后,开始播放媒体 public void prefetchComplete(PrefetchCompleteEvent prefetchDoneEvent) { getMediaComponents(); validate(); (); //开始播放媒体 //这儿才能得到准确的文件播放时间 newTime=(float)iaTime().getSeconds(); fileTime=(float)ation().getSeconds(); } //如果媒体播放完毕,重新设置媒体时间并停止媒体播放器 public void endOfMedia(EndOfMediaEvent mediaEndEvent) { /*iaTime(new Time(0)); //重新设置媒体时间 (); // 停止媒体播放 but_n(new ImageIcon("play_.png")); play_temp = true;*/ if(isSingle_play==true)//如果单曲播放按钮被选中 { (); } if(isSingle_loop==true){//如果单曲循环按钮被选中 boolean isThisOne; for(int i=0;i isThisOne=(i).toString().endsWith(ectedValue().toString()); if(isThisOne==true){ try { startPlayer((i).toURL().toString()); ectedIndex(i); return; } catch (MalformedURLException e) { tackTrace(); } } } } 第18页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] if(isLoop_play==true){//如果循环按钮被选中 boolean isThisOne; for(int i=0;i isThisOne=(i).toString().endsWith(ectedValue().toString()); if(isThisOne==true){ try { startPlayer((i+1).toURL().toString()); ectedIndex(i+1); return; } catch (MalformedURLException e) { tackTrace(); } } } } if( isRandom_play==true){//如果随机按钮被选中 int index=(int)((()*e())); try { startPlayer((index).toURL().toString()); ectedIndex(index); return; } catch (MalformedURLException e) { tackTrace(); } } } } /****************************************************/ public void getMediaComponents() { visualMedia = ualComponent(); //取得视频显示组件 te(); //如果对象visualMedia非空则加入到窗口内容窗格 if (visualMedia != null) { panel_(visualMedia, ); //setVisible(true); //设置窗口为可视 } mediaControl = trolPanelComponent(); //取得播放控制组件 //如果对象visualMedia非空则加入到窗口内容窗格 if (mediaControl != null){ nds(0, 5,540 ,20); 第19页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] panel_(mediaControl); } seListener(new MouseAdapter(){ //可视化视频文件监听事件 public void mousePressed(MouseEvent e) { //ressed(e); n(ifiers());//通过这个函数返回值区分是单击还是双击 int mods = ifiers(); if (mods==4 && (rce() == visualMedia) || (rce() == panel_up)){ //4时为右击 (menuItem_paly); (menuItem_stop); (menuItem_controlPlayer); (menuItem_allScreen); (menuItem_exit); menuItem_(menuItem_skinForwind); menuItem_(menuItem_rewind); if (rce() == visualMedia) { (visualMedia, (), ()); } if ((mods & 4) != 0 && rce() == panel_up) { (panel_up, (), ()); } } } public void mouseClicked(MouseEvent e){ //鼠标单击播放视频界面事件 if(ckCount()==1 && (ton()==1)) //鼠标左键单击播放视频界面时处理事件 { if (play_temp) { (); but_n(new ImageIcon("pause_.png")); play_temp = false; } else { (); but_n(new ImageIcon("play_.png")); play_temp = true; } } if(ckCount()==2 && (ton()==1)) //双击播放视频界面全屏或从全屏变回为正常界面 { 第20页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] //for(int i=0;i //在文件目录中寻找到选中的文件名 //全屏 if(ckCount()==2&&fullscreen==false){ // (file); // (play); // (help); // (MBar); Toolkit tk = aultToolkit(); Dimension fullSize = eenSize(); setLocation(0, 0);//设置位置和大小 setSize(fullSize); panel_e(fullSize); fullscreen=true; return; } if(ckCount()==2&&fullscreen==true){ // (file); // (play); // (help); // (MBar); setLocation(0, 0);//设置位置和大小 setSize(540,325); panel_e(400, 200); fullscreen=false; } } } }); } //内部类结束 实验结果 能够实现所要求的所有功能,即能够正确的播放视频文件,能够进行播放文件的选择,文件列表框中陈列选择的视频文件,能够控制视频的播放,退出,停止,快进,快退,下一个,上一个,音量的控制,静音控制,全屏选择,任意改变播放视频界面大小等功能。 总结分析 继C++之后学习Java 程序设计语言会感觉很轻松,因为Java 与C++语法类似,并把C++中一些较低级和较难以理解的功能都去掉了,如多继承、指针等,同时Java增强了部分功能,如“+”运算符的重载。对于初学Java的人而言,难点是 Java中的 引用、初始化一个类过程等。总的来说,Java 其易于学习、高效率的执行方式、平台无关性、分布式与高安全性及其丰富的API文档和类库等特点都说明Java 是程序设计语言的伟大进步的表现。 第21页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] 可以说这么说,本次课程设计综合考察了我们对Java程序设计知识的掌握熟练程度和实际运用能力。其间,涉及到了Java 中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流等。当然,这次实验中最重要的还是通过设计一个视频播放器来对java media frame有了深层次的掌握和理解,并能够进行实际的应用。 程序实现的关键在于功能的合理划分以及各个包或者类之间的通讯问题,只要分析清楚这两点,剩下的就是按部就班的写代码了。所以设计是关键。 功能实现了,再就是如何对程序进行性能优化的问题。把公用的部分用单独的类或者是独立的函数来实现就可以大大简化代码的重复,对程序的理解也有很好的改进。 学习Java,一定要循序渐进,要一步一步地进行; 总之,作为一门程序设计语言,Java 的学习务必要做到多看多写多想多请教。 多看,看高手、大师的程序,借鉴其解题思路和程序架构;多写,学习程序设计很重要的就是要自己亲自动手写代码,切忌犯眼高手低的弊病,而且这样记忆非常深刻;多想,程序调试中出现一些“莫明其妙”的问题,为什么会这样而不是那样;多请教:程序设计说到底是要彻底搞清设计该语言的人的思想,遇到问题想不通应该请教同学、老师等。这样可达到事半功倍的目的。 参考资料 《Java程序设计之网络编程》, 李芝兴编,清华大学出版社,出版时间2006年3月 (美)Cay ann,Gary Cornell编,《Java2 核心技术第6版:基础知识》,机械工业出版社,出版时间 2003年10月 (美)Bruce Eckel编,《Java编程思想第2版》,机械工业出版社,出版时间2002年9月 《JMF入门指南》,网络下载。 开始 读入视频文件 播放控制(开始/结束) 音量控制(调大/调小) 结束 第22页 [键入文字] iava课程设计---视频播放器 组员:代金龙 程飞 王小东 [键入文字] 第23页
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689066907a202380.html
评论列表(0条)