计算机科学技术与工程系《Java课程设计》课程设计报告题目:简易媒体播放器班级:0633081姓名:063308123郭伟 063308164张志朋063308125靳浩兵063308168周小晨指导教师:陈红军、赵军民设计日期:2010.01.11-15专业:计算机网络技术目录1 、引言..................................... 错误!未定义书签。
2 、设计依据 ................................ 3错误!未定义书签。
2.1设计平台...................................................................... 错误!未定义书签。
2.2设计思想...................................................................... 错误!未定义书签。
3、主要框架图、............................ 错误!未定义书签。
4、详细设计 (4)5 、软件调试分析 ............................. 错误!未定义书签。
6 、源程序代码 .............................. 6错误!未定义书签。
7、执行结果 (15)8、学习心得 ................................ 15错误!未定义书签。
9、参考文献 ................................ 16错误!未定义书签。
1、引言:旨在考察在经过一个学期的学习,对JA V A知识的理解与应用。
同时把所学的理论知识用于实战编程,进而培养同学们的动手能力和团结协作的团队意识。
综合应用java语言的相关知识,独立设计中型的Java应用程序。
通过本课程设计,使学生巩固《JA V A课程设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手能力,闯过编程关。
2、设计依据:1、设计平台Eclipse是开发源码项目,由于其开放源码,任何人都可以免费使用,并可以在此基础上开发各自的插件,eclipse不只作为一个JA V A IDE的开发平台,而且是作为一个平台框架,各种各样的插件都可以安装在它上面,从而形成各种各样的工具,它有开源软件,使用插件功能,可以完成比较复杂的开发等优点。
此Java程序设计就是在Eclipse环境平台下开发的。
Java API文档:Java API文档包含了Java的大部分类,方面查询不熟悉的类,所以它是一款不错的帮助文档!2、设计思想根据一学期对JA V A 知识的学习,在Eclipse平台下,导入JMF包通过不断查询API 文档,编写媒体播放器在现有类的基础上组织一个新类。
有时,我们也将组织称作“包含”关系。
播放器主要针对面向对象,并且实现序列化接口,多线程等知识。
对象的组织具有极大的灵活性。
新类的“成员对象”通常设为“私有”(Private),使用这个类的客户程序员不能访问它们。
这样一来,我们可在不干扰客户代码的前提下,从容地修改那些成员。
也可以在“运行期”更改成员,这进一步增大了灵活性。
后面要讲到的“继承”并不具备这种灵活性,因为编译器必须对通过继承创建的类加以限制。
由于继承的重要性,所以在面向对象的程序设计中,它经常被重点强调。
作为新加入这一领域的程序员,或许早已先入为主地认为“继承应当随处可见”。
沿这种思路产生的设计将是非常笨拙的,会大大增加程序的复杂程度。
相反,新建类的时候,首先应考虑“组织”对象;这样做显得更加简单和灵活。
利用对象的组织,我们的设计可保持清爽。
一旦需要用到继承,就会明显意识到这一点。
3、程序主要框架图4、详细设计图形分析:本程序的播放器图形有五部分构成,即四个面板个和一个存放歌曲文件名的滚动面板JscrollPane。
第一个面板存放时间标签(label)第二个面板存放三个按钮,第三个存放滑标(Jslider)第四个面板放置二个按钮。
模块功能:本程序由十五个小模块构成,分别是:一:序列化接口二:一个MP3类继承了Jframe 同时实现了线程的Runnable接口,类里分别为:五个按钮的事件处理,滚动面板里组件的事件处理,窗口关闭事件,run( )方法,daoxu( )方法,fun( )方法,fen( )方法以及main( )主方法。
Lujin类实现序列化就是方便它的属性值保存起来,适当的时候在取出来。
首先,添加文件需要实现一个JFileChooser对象(文件选择器)对文件进行选择再判断是否是MP3格式,开始播放用到一JList对象的getSelectedIndex( )对列表里文件进行选择播放,同时又MediaPlayer对象的getDuration( ).getSeconds( )方法的时间二者之间都调用了线程sleep方法如果格式不对或没有选文件会弹出提示对话框。
循环播放与上同。
停止播放方法里通过设置属性调用stop()结束播放同时滑标左右播放时间消失。
删除操作调用了removeAlementAt( )删除指定位置处的组件。
其中的fun( )方法作用是对文件进行序列化。
Daoxu( )是对文件的相对路径进行更改,改为纯文件名(*.MP3)5、调试与测试:调试要根据Eclipse中出错的信息以及所导入的javadoc文档还有一些快捷键进行快速调试,通过Eclipse运行平台自带的ru n→Java Application进行运行程序。
看运行结果是否与自己的预想是否相同再进行调试。
测试过程中遇到问题:(1)某些用到的类不熟悉,需要查找API (2)没法运行程序,看是否Eclipse配置的一些变量成功。
(3)JMF包如何导入及使用,需上网查找。
6、程序源代码:import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.swing.*;import javax.media.bean.playerbean.*; //这个包要用到JMFclass Lujin implements Serializable {//序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
private static final long serialVersionUID = 1L;Vector<CharSequence> a ;//CharSequence 是 char 值的一个可读序列Vector<CharSequence> b ;public Lujin(Vector<CharSequence> vector, Vector<CharSequence> mingcheng) {a = vector;b = mingcheng;}}public class MP3extends JFrame implements Runnable {private static final long serialVersionUID = 1L;//为了在反序列化时,确保类版本的兼容性public JLabel shijian;private JSlider sldDiameter;//滑标public MediaPlayer sound1;public JButton playSound, loopSound, stopsound;public JButton tj, sc;public JPanel jp1, jp2, jp3, jp4;public JList jl;int zongmiao=0;public Vector<CharSequence> vector, mingcheng;//charsequence是char 值的一个可读序列boolean fo = false, geshi = false;JLabel jl1, jl2, sj1, sj2;//sj1,sj2分别用在playSound(),loopSound(),stopsound()方法中显示与取消时间数据JTextField jt1, jt2;int a = 0, b = 0, you = 1,mm=0,zong = 0;int fenzhong, miaozhong;public MP3() {super("java简单音乐播放器");sound1 = new MediaPlayer();Container c = getContentPane();//AWT容器对象是一个可包含其他 AWT 组件的组件。
c.setLayout(new FlowLayout());mingcheng = new Vector<CharSequence>();jp1 = new JPanel();jp1.setBackground(Color.gray);shijian = new JLabel();jp1.add(shijian);c.add(jp1);playSound = new JButton("开始播放");loopSound = new JButton("循环播放");stopsound = new JButton("停止播放");jp2 = new JPanel();jp2.setBackground(Color.BLUE);jp2.add(playSound);jp2.add(loopSound);jp2.add(stopsound);c.add(jp2);jp3 = new JPanel();jp3.setBackground(Color.cyan);sj1 = new JLabel();sj2 = new JLabel();sldDiameter = new JSlider(SwingConstants.HORIZONTAL, 0, 100, 0);//一个让用户以图形方式在有界区间内通过移动滑块来选择值的组件sldDiameter.setMajorTickSpacing(1);//此方法设置主刻度标记的间隔。
sldDiameter.setMinimum(2);//此方法设置次刻度标记的间隔。
sldDiameter.setPaintTicks(true);//确定是否在滑块上绘制滑道。
jp3.add(sj1);jp3.add(sldDiameter);//进度条左右时间标签。