JAVA带面板的视频播放器制作课程设计.doc

上传人:jian****018 文档编号:8744594 上传时间:2020-03-31 格式:DOC 页数:20 大小:3.03MB
返回 下载 相关 举报
JAVA带面板的视频播放器制作课程设计.doc_第1页
第1页 / 共20页
JAVA带面板的视频播放器制作课程设计.doc_第2页
第2页 / 共20页
JAVA带面板的视频播放器制作课程设计.doc_第3页
第3页 / 共20页
点击查看更多>>
资源描述
JAVA课程设计报告课 题: 带面板的视频播放器的制作 专业班级: 计算机科学与计算学 学 号: 201017010227 姓 名: 朱 林 同组成员: 李 伟 指导教师: 唐 石 评阅意见:评定成绩: 指导老师签名: 年 月 日目 录目 录第1章 课程设计的目的和意义31.1 设计目的31.2 设计意义3第2章 课程设计要求3第3章 需求分析4第4章 程序设计过程5 4.1 实验原理5 4.2 程序设计图6 4.3 设计及核心代码7第5章 系统测试15第6章 心得体会19第7章 参考文献20第1章 课程设计的目的和意义1.1 设计目的 1.训练掌握,加深理解并巩固java语言程序设计课程中所学到的基本概念、编程思路以及语法知识2.综合运用java程序设计的编程方法,能够利用这些程序设计方法来解决工程和科研中常见的实际问题3.培育分析问题解决问题的能力,进一步提高并巩固进行大型程序设计的能力4.提高学生实践论文撰写能力1.2 设计意义java 是一种高级编程语言,是编程的基本工具,是为软件开发,网页制作等与计算机编程有关专业的基础课程!学好java语言程序设计对计算机专业的人来说必不可少的一件事,对大学生将来进入软件行业从事java软件开发有着不可替代的作用,为大学生提供了一种锻炼自我勇于实践的能力,也提高大学生的动手能力,所以课程设计是相当的重要。第2章 课程设计要求Java程序设计是计算机网络工程专业一门重要的专业必修课。为了进一步巩固课堂上所学到的知识,深刻把握Java技术的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设Java程序设计的课程设计。课程设计的任务是完成课程设计内容,写出课程设计报告。要求学生掌握:1.掌握Java的语言规范,面向对象的核心概念和特性;2.掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等;3.掌握Java应用软件的开发环境和开发过程;4.掌握基于Jsp网站的开发环境和开发过程;5.掌握面向对象的思想和程序设计方法。第3章 需求分析3.1任务目的:1实现视频文件的正确播放;2. 能够实现对视频播放的控制,如暂停,播放,快进,快退,上一个,下一个等功能;3能够进行文件视频的选择,全屏,音量的控制,拖动,播放模式的控制等;4任意改变播放视频界面大小等功能。3.2程序的设计、调试、运行的软件环境:操作系统:Windows XP(SP2)数据库及数据库管理软件:SQL Server 2005JDK环境:Java SE Development Kit(JDK)Version 6开发工具:Eclipse运行平台:Windows、Linux各个版本、MAC等任何平台运行环境:Java SE Runtime Environment(JRE)Version第4章 程序设计过程4.1实验原理JMF提供了一个平台无关的框架来呈现时基媒体(time-based media)。JavaMediaPlayerAPI的设计目标是支持多种标准的媒体格式,包括MPEG-1,MPEG-2,QuickTime,AVI,WAV,AU和MIDI.使用JMF,可以同步呈现不同来源的时基媒体。现有的一些媒体播放器都严重依赖原生码来执行解压缩、渲染 等 计算密集型任务。而JMF API则隐藏了具体实现,只提供抽象的编程接口。举例来说,一个用JMF制作的播放器,具体运行的过程中可能会调用到操作系统的本地方法,但开发者写代码时可以无视本地方法的存在。JMF Player API : 接入不同的协议和分发(传输)机制 接入不同的媒体数据类型定义事件模型,用于Player和应用程序间的异步通信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时,则会返回正确的时长。JMF播放器文件播放上一个设置打开循环退出暂停删除下一个4.2程序设计图4.3设计及核心代码创建“文件”菜单l 创建“打开”菜单l 把JMFMediaPlayer对象注册成功为“打开”菜单项动作事件的监听器l 把“打开”菜单项加入“文件”菜单l 把“文件”菜单中加入一条水平分隔线l 创建带检查框的“循环”菜单项l 把JMFMediaPlayer对象注册成功为“循环”菜单项动作事件的监听器l 把“循环”菜单项加入“文件”菜单l 在“文件”菜单项中加入一条水平分隔线l 按照创建“打开”菜单项的过程,创建“退出”菜单项l 创建“播放”菜单l 创建“上一个”菜单l 创建“下一个”菜单项l 创建“保存”菜单l 把JMFMediaPlayer对象注册成功为“暂停”菜单项动作事件的监听器l 把“暂停”菜单项加入“设置”菜单l 在“设置”菜单中加入一条水平分隔线l 创建“删除”菜单项l 把JMFMediaPlayer对象注册成功为“删除”菜单项动作事件的监听器l 创建一个菜单条(MenuBar)l 把“文件”菜单加入到菜单条l 把“播放控制”菜单加入到菜单条l 把“播放列表”菜单加入到菜单条/ 创建播放器的菜单 JMenu zhu= new JMenu(设置); JMenu fileMenu = new JMenu(文件); JMenu zhu1= new JMenu(播放);JMenu zhu2= new JMenu(上一个);JMenu zhu3= new JMenu(下一个);JMenuItem openMemuItem = new JMenuItem(打开); JMenuItem haha1 = new JMenuItem(暂停); JMenuItem haha2 = new JMenuItem(删除); openMemuItem.addActionListener(this); fileMenu.add(openMemuItem); zhu.add(haha1); zhu.addSeparator(); zhu.add(haha2); zhu.addSeparator(); zhu.add(haha3); zhu.addSeparator(); zhu.add(haha4); zhu.addSeparator(); zhu.add(haha5); zhu.addSeparator(); / 添加一个分割条 fileMenu.addSeparator(); / 创建一个复选框菜单项 JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem(循环, false); loopMenuItem.addItemListener(this); fileMenu.add(loopMenuItem); fileMenu.addSeparator(); JMenuItem exitMemuItem = new JMenuItem(退出); exitMemuItem.addActionListener(this); fileMenu.add(exitMemuItem); JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); menuBar.add(zhu);menuBar.add(zhu1);menuBar.add(zhu2);menuBar.add(zhu3);this.setJMenuBar(menuBar); this.setSize(200, 200); try / 设置界面的外观,为系统外观 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); SwingUtilities.updateComponentTreeUI(this); catch (Exception e) e.printStackTrace(); this.setVisible(true); 动作监听器动作监听器根据用户的操作作出相应的反应(1) 如果动作事件起源于“退出”菜单项,触发一个给查监听器的窗口关闭事件(2) 如果动作事件起源于“播放“菜单项,判断当前是否存在一个播放器,存在则将该播放器置于运动状态(3) 如果动作事件起源于“暂停”菜单项,判断当前是否存在一个播放器,存在则停止该播放器的播放(4) 如果动作事件起源于“下一个”菜单项,判断当前是否存在一个播放器,存在则停止该播放器的播放,并把播放指针移到下一个文件(5) 如果动作事件起源于“打开”菜单,则:l 创建一个“打开媒体文件“对话框l 把对话框的当前目录设置为上次关闭时的目录l 显示对话框。这个对话框是一个模式对话框l 如果用户没有通过对话框选择媒体文件,则返回(6) 如果出现异常l 显示错误信息,然后返回l 把主窗口的标题设置为媒体文件的名字l 把JMFMediaPlayer对象注册为来自JMF播放器对象的控制器事件的监听器l 让JMF播放器对象预先提取媒体内容/* * 实现了ActionListener接口,处理组件的活动事件 */ public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(退出) / 调用dispose以便执行windowClosed dispose(); return; FileDialog fileDialog = new FileDialog(this, 打开媒体文件, FileDialog.LOAD); fileDialog.setDirectory(currentDirectory); fileDialog.setVisible(true); / 如果用户放弃选择文件,则返回 if (fileDialog.getFile() = null) return; currentDirectory = fileDialog.getDirectory(); if (player != null) / 关闭已经存在JMF播放器对象 player.close(); try / 创建一个打开选择文件的播放器 player = Manager.createPlayer(new MediaLocator(file: + fileDialog.getDirectory() + fileDialog.getFile(); catch (java.io.IOException e2) System.out.println(e2); return; catch (NoPlayerException e2) System.out.println(不能找到播放器.); return; if (player = null) System.out.println(无法创建播放器.); return; first = false; this.setTitle(fileDialog.getFile(); / 播放器的控制事件处理 player.addControllerListener(this); / 预读文件内容 player.prefetch(); 控制监听器控制监听器完成与控制相关的操作,具体包括以下几种情况(1) 当控制器被关闭,如果JMF播放器的视觉部分存在,从JMFMediaPlayer容器拆除视觉部件。如果JMF播放器的控制面板部件存在,从从JMFMediaPlayer容器拆除控制面板部件(2) 当媒体回放结束,复位JMF播放器对象的开始时间。(3) 当预提取媒体内容结束,JMF播放器对象开始播放媒体(4) 当实例化(realize)完成,则l 获取JMF播放器对象的视觉部件,如果视觉部件存在,则把它加入到JMFMediaPlayer容器的中间l 获取JMF播放器对象的控制面板部件,如果控制面板部件存在,则把它加入到JMFMediaPlayer容器的下方l 获取JMF播放器对象的扩展控制面板部件,如果扩展控制面板部件存在,则把它加入到JMFMediaPlayer容器的上方l 如果播放中含有图形,执行pack()操作* 实现ControllerListener接口的方法,处理播放器的控制事件 */ public void controllerUpdate(ControllerEvent e) / 调用player.close()时ControllerClosedEvent事件出现。 / 如果存在视觉部件,则该部件应该拆除(为一致起见, / 我们对控制面板部件也执行同样的操作) if (e instanceof ControllerClosedEvent) if (vedioComponent != null) this.getContentPane().remove(vedioComponent); this.vedioComponent = null; if (controlComponent != null) this.getContentPane().remove(controlComponent); this.controlComponent = null; return; / 如果是媒体文件到达尾部事件 if (e instanceof EndOfMediaEvent) if (loop) / 如果允许循环,则重新开始播放 player.setMediaTime(new Time(0); player.start(); return; / 如果是播放器预读事件 if (e instanceof PrefetchCompleteEvent) / 启动播放器 player.start(); return; / 如果是文件打开完全事件,则显示视频组件和控制器组件 if (e instanceof RealizeCompleteEvent) vedioComponent = player.getVisualComponent(); if (vedioComponent != null) this.getContentPane().add(vedioComponent); controlComponent = player.getControlPanelComponent(); if (controlComponent != null) this.getContentPane().add(controlComponent, BorderLayout.SOUTH); this.pack(); 其他监听器1 菜单项监听器菜单项监听器主要针对“循环”菜单项的单击动作进行反应当菜单项状态改变时,切换“循环”菜单被选中的状态2 窗口监听器值得注意的是窗口监听器是在构造函数中进行定义和注册的,这一点不同于以上介绍的其他方法,它只是在退出窗口时执行。l 定窗口大小,并显示控制器/ 处理“循环”复选框菜单项的点击事件 public class Zhu extends JFrame implements ActionListener, ControllerListener, ItemListener / JMF的播放器 Player player; / 播放器的视频组件和控制组件 Component vedioComponent; Component controlComponent; / 标示是否是第一次打开播放器 boolean first = true; / 标示是否需要循环 boolean loop = false; / 文件当前目录 String currentDirectory; / 构造方法 public Zhu(String title) super(title); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) / 用户点击窗口系统菜单的关闭按钮 / 调用dispose以执行windowClosed dispose(); public void windowClosed(WindowEvent e) if (player != null) / 关闭JMF播放器对象 player.close(); System.exit(0); ); public void itemStateChanged(ItemEvent e) loop = !loop; 第5章 系统测试1.测试视频文件我们首先来播放一个视频,以铁拳:血之复仇为例,视频格式为AVI格式,以下为视频截图2.测试音频文件下面来测试一下播放音频文件,以本兮:情花为例,此音乐文件的格式为WAV3.最终结果通过上面的实例测试,我们可以看出,由于java 的JMF的缘故,java视频播放器支持的视频格式文件不是很多,像目前网上常见的3GP,RMVB,DVD,WMV,MPEG4等格式均不支持,但是AVI格式却是支持的;同时,在音频文件方面也存在着同样的问题,比如说目前市面上常见的MP3格式,由于部分原因,此视频播放器不能够正常播放,但是对于WAV格式的音乐来说则不存在这些问题。第6章 心得体会这次课程设计我做的是带面板的视频播放器的制作,主要是服务于学生进行阶段性自测和练习。播放器的制作分为设计和测试两部分,每一部分又各分若干专题。虽然播放器的基本功能都已实现,但还是存在系统不稳定等多个问题尚待解决。这个播放器主要是我和队友一起开发的,但也得到了老师和同学的很大帮助。我在做播放器的过程中遇到了很多问题,有的是知识存储不足,有的是考虑不够周全,之所以能够顺利实现基本功能,离不开老师和同学的大力相助。事实证明,只靠自己是不能顺利设计完成一个功能完整的播放器的,必须充分利用团队的力量。开发设计一个播放器,最重要的是细心,并不是一定要做到面面俱到,但也要充分考虑到播放器的功能和用途,不管做什么设计,只用运用到实际应用中,才具有先现实意义。所以在准备工作中要正确分析社会需求了解现实应用,画出流程图,把大体框架做好,然后再逐一细化。我们不可能做到面面俱到,但一定要做到步步扎实,作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的基本习惯和开发系统时应注意的流程第7章 参考文献李尊朝,苏军. Java语言程序设计(第二版)M. 北京:中国铁道出版社,2007庞永庆,庞丽娟 等. 21天学通java(第一版)M. 北京:电子工业出版社,2009-1-1(美)埃克尔 著 陈昊鹏 译 . Think in java(第4版)M. 北京:机械工业出版社2007-6-1李钟尉. Java范例完全自学手册M. 北京: 人民邮电出版社 ,2009-10
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!