服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

用jbuilder9开发媒体播放器

用jbuilder9开发媒体播放器(图一)  jbuilder9是一款功能强大的集成开发环境,支持sun的j2se1.4,能够快速生成程序框架、设计图形界面、调试程序等,也能够快速开发包括各种复杂的企业级应用系统。使用jbuilder进行java应用程序开发,可以极大地加快生手的学习速度,缩短熟手的开发时间。本文将通过编写一个媒体播放器来介绍如何使用jbuilder9。

阅读导航
一、概述
二、jmf软件包1、jmf软件包的功能
2、jmf软件包的安装
3、在jbuilder 9中使用jmf软件包
三、多媒体系统设计规划
四、多媒体界面设计1、主界面设计
2、辅助界面设计
五、媒体播放器功能实现1、实现界面
2、设计菜单
3、播放
一、概述

  在阅读导航中下载源代码,然后jbuilder9中运行程序,就会出现“java视频播放系统”的主界面,如图1所示。

用jbuilder9开发媒体播放器(图二)

  这是一个菜单驱动的多媒体应用程序,它的菜单栏包含“文件”、“播放”和“帮助”。“文件”包含两个子菜单:“打开”和“退出”。“播放”菜单包含“循环播放”子菜单。“帮助”菜单包含“关于”子菜单项,用来向用户显示公司和版本的信息。

  二、jmf软件包

  jmf实际上是一组java类库,在java的应用软件或者小程序中实现多媒体数据的播放和采集,它包括了各种媒体应用程序接口,目前通过java开发多媒体软件主要使用jmf软件包。

  1、jmf简介

  jmf2.1.1是对应java2平台标准版(j2se)的一种可选用的应用编程接口软件包,支持多种媒体格式,如:m-jpeg,h.263,mp3,rtp/rtsp,rich media format(rmf)、quicktime,microsoft avi和mpeg-1等。此外,jmf 2.1.1还是一个开放的架构,开发人员灵活采用各种第三方控件,或采用自己定制的内插控件。

  安装jmf2.1.1在硬件上有些要求,不过即使现在比较垃圾的配置也能够满足需要;系统要求在win95以上,jdk1.1.3以上。

  2、jmf的安装步骤:

  在介绍完了jmf软件包之后,下面就要在windows 2000平台上安装jmf 2.1.1e软件包了,步骤如下:

  (1)在sun网站上下载jmf 2.1.1e软件包。

  (2)运行jmf安装程序,解压jmf类库到一个目录下,比如d:/jmf2.1.1e。(以下将以d:/jmf 2.1.1e作为jmf的安装目录)

  (3)设置环境变量jmfhome。在windows 2000平台上,右击“我的电脑”,再单击“属性”,选择“高级”标签,然后单击“环境变量”,设置jmfhome=h:/jmf 2.1.1e。

  (4)设置环境变量classpath。设置为classpath=.;d:/jmf2.1.1e/lib/sound.jar;d:/jmf2.1.1e/lib/jmf.jar;d:/jmf 2.1.1e/lib;必须包含jmf类库中的sound.jar和jmf.jar这两个jar文件。

  在安装配置完成后,通过jmf diagnostics applet程序来检测jmf软件包是否配置正确。 通过http:/java.sun.com/products/java-media/jmf/2.1.1/jmfdiagnostics.html网址来检测本机的jmf配置。jmf diagnostics applet是一个javaapplet小程序,它可以搜索本地的jmf类库的配置来检测是否正确配置了jmf软件包。

  3、在jbuilder 9中使用jmf软件包

  jbuilder9的java编译器是jdk 1.4.1 02-b06,其中没有集成jmf软件包。因此要需要在jbuilder中添加jmf类库。在jbuilder 9中添加jmf类库的过程如下。

  (1)运行jbuilder9,选择tool菜单下的configure libraries菜单项,弹出configure libraries对话框,如图2。左边列表框列出了jbuilder 9所使用的类库。单击左边的new按钮来添加jmf类库。

用jbuilder9开发媒体播放器(图三)

  (2)在弹出的new library wizard对话框。

  在name文本框中输入jmf,在location下列表拉框中选择jbuilder,然后单击add,在打开的对话框中来选择jmf软件包的安装目录。

  (3)最后,单击ok按钮。 三、多媒体系统构架设计规划

  媒体播放器要有一个主窗口,以作为该视频播放器的主操作界面。其次,还要对每个菜单项设置相应的操作:

  选择“打开”菜单项,弹出一个“打开媒体文件”的选择对话框,用于选择要播放的文件,如果用户没有选择,则返回主界面;

  选择“退出”菜单项可自动退出程序;

  对于“循环播放”菜单项是一个带检查框(checkable/uncheckable)的菜单项,默认状态是未选中,表明只对播放一次,如果选择中该菜单,则表明要进行循环播放;

  选择了“关于”菜单项,可弹出一个“关于视频播放系统v1.0”的对话框,向用户显示公司和版本的信息。如下图3所示。

用jbuilder9开发媒体播放器(图四)

  下面我们就可以在jbuilder 9中来实现我们的媒体播放器了。

  1、创建工程

  在jbuilder 9的ide开发环境中,通过工程向导新建一个工程(通过工具栏上的new按钮),命名为jvideosystem.jpx。然后,设置所需要的类库,本例中为jmf软件包,方法是在required libraries标签页中单击add按钮,在弹出的select one or more libraries对话框中选择jmf类库。

  2、创建应用程序和框架

  在jvideosystem.jpx工程中,单击new按钮新建一个应用程序,将应用程序的package命名为jvideosystem,将class name命名为jvideoplayer。然后,将主框架/界面的class命名为jvideoplayerframe,title设为“java媒体播放器”。在options中选中generate menu bar复选框;不选generate toolbar复选框;选中generate about dialog复选框。最后设置其他信息。

  3、功能实现

  在完成前面的工作之后,下面来添加相应的功能以完善该系统。

  该视频播放系统有3个类,分别是:

   jvideoplayer类----它是整个程序运行的起点;

   jvideoplayerframe类----主界面,菜单驱动的功能都放置在这个类中;

   jvideoplayerframe aboutbox类----辅助界面,向用户显示公司和版本信息。如下图4所示。

用jbuilder9开发媒体播放器(图五) 四、多媒体界面设计

  1、主界面设计

  首先,对jvideoplayerframe这个系统的主界面进行界面设计。

  双击图中的jvideoplayerframe.java图标,在jbuilder 9的ide开发环境中选择 design标签,进入主界面的设计器,在此将完成主界面的界面设计。界面设计器如图5所示。

用jbuilder9开发媒体播放器(图六)

  注意,jvideoplayerframe类(即主界面类)用this关键字来指代,ui目录包含了所有的可视化部件。这里设置主界面窗口的title属性为“ java媒体播放器”,resizable属性设置为false,即在程序运行时不能改变主界面窗口的大小,并且注册windowsclosing事件监听器this windowclosing(windowevent e)和windowsclosed事件监听器this windowclosed(windowevent e),以在主界面窗口关闭时执行相应的程序代码。在this下面则包含了主界面中所有的ui控件:contentpane,jlabel1,jpanelvideo。在menu目录下则包含了主界面的菜单栏和相应的菜单项。通过ui和menu目录的层次,可以清楚地看到下面各个部件之间的相互关系。

  下面来看看如何设计ui和menu。

  1)contentpane“容器”设计

  jbuilder9已经为主界面添加了一个jpanel类的对象contentpane,它是用来放置其他控件的“容器”,将“容器”contentpane的layout属性设置为borderlayout。

  状态栏设计

  向主界面添加一个jlabel类的对象作为主界面的状态栏。 在swing控件库中选择jlabel拖放到contentpane上,然后设置该jlabel类对象的属性以满足要求。

  在jbuilder9的ide开发环境的属性设计器中,设置该jlabel类对象的名称为jlabell(name属性);constraints属性为south,即该状态栏在contentpane中的位置在最下端;opaque属性为true,即该状态栏是不透明的:text属性为“欢迎使用java 视频播放系统copyright@2004”,即该状态栏显示的文本信息;tooltiptext属性为“状态栏”,即鼠标移动到该状态栏上时的提示信息。其他的属性保持默认状态。如下图6所示。

用jbuilder9开发媒体播放器(图七)

  视频播放窗口设计

  jmf播放器对象有两个部件:视觉部件,用户选择的媒体文件将在视觉部件中播放;控制面板部件,用于控制媒体文件的播放进度、媒体文件回放和声音的开关等。

  首先要向contentpane容器中添加一个jpanel类的对象jpanelvideo,jmf播放器的视觉部件和控制面板部件就放置在jpanelvideo对象中,然后再将jpanelvideo对象放置在contentpane容器中。

  从swing containers控件库中选择jpanel拖放到comempane中,并且设置它的属性。name属性为jpanelvideo;constraints属性为center,即jpanelvideo在comempane的中央:layout属性为borderlayout;opaque属性为true,即不透明:tooltiptext属性为“视频窗口”,即鼠标移动到该控件上时显示的提示信息。其他属性保持默认状态。

  2)菜单栏设计

  在jbuilder9中设计菜单是非常方便的。

  在创建应用程序时选择了generate menubar,jbuilder9会自动生成菜单栏jmenubar1,我们要做的就是在菜单栏中添加相应的菜单和菜单项。

  在jmenubar1中依次添加“文件”菜单----jmenufile、“播放”菜单----jmenuplay、“帮助”菜单----jmenuhelp,然后在“文件”菜单中依次添加“打开”菜单项----jmenufile open、“退出”菜单项----jmenufile exit,在“播放”菜单中添加带检查框的“循环播放”菜单项----jcheckboxmenultem_loop,在“帮助”菜单中添加“关于”菜单项----jmenuhelp_about。如图7所示。

用jbuilder9开发媒体播放器(图八)

  接下来,在属性设计器的events标签页中添加每个菜单项的动作事件,以触发相应事件。对于“打开”菜单项,注册jmenufile_open_actionperformed(actionevent e)监听器;对于“退出”菜单项,注册jmenufile_exit_actionperformed(actionevent e)监听器;对于“循环播放”菜单项,注册checkboxmenultem_loop_actionperformed(actionevent e)监听器;对于“关于”菜单项,注册jmenuhelp_about_actionperformed(actionevent e)监听器。

  至此,主界面就设计完成了。下面要对jvideoplayerframe aboutbox这个系统的辅助界面进行设计。

  2、辅助界面设计

  辅助界面中的“容器”对象是panel类的对象panel1,它的layout属性为borderlayout;在这个“容器”对象中还放置了4个panel类的对象,它们分别是insetspanel1,panel2,insetspanel2和insetspanel3。insetspanel的layout属性为flowlayout,“确定”按钮就放置在其中;panel2的layout属性为borderlayout,insetspanel2和insetspanel3就放置在其中;insetspanel2的layout属性为flowlayout,imagelabel类的对象就放置在其中,它是一个图标标签:insetspanel3的layout属性为gridlayout,3个label类的对象label1,label2和label3就放置在其中,这3个标签向用户显示了公司和版本信息。 五、媒体播放器功能实现

  1、实现界面

  对于“退出”菜单项和“关于”菜单项,已注册了菜单项监听器,用来结束主程序和打开辅助界面窗口;同时也注册了主界面的windowclosing和windowclosing事件监听器,用来完成主界面窗口的关闭操作;在辅助界面窗口中,注册了“确定”按钮的事件监听器,以完成辅助窗口的关闭操作和辅助界面窗口的windowclosed事件监听器。下面就来看看它们的代码:

  1)jmenufile_exit_actionperformed(actionevent e)监听器

//菜单“文件|退出”事件监听器
void jmenufile_exit_actionperformed(actionevent e){
 //关闭主界面窗口,退出主程序
 dispose();
 return;
}

  2)jmenuhelp_about_actionperformed(actioneyent e)监听器

//菜单“帮助|关于”事件监听器
public void imenuhelp_about_actionperformed(actionevent e) {
 //创建辅助界面窗口对象
 jvideoplayerframe_aboutbox dlg=new jvideoplayerframe_aboutbox(this);
 //设置辅助界面窗口的属性
 dimension dlgsize=dlg.getpreferredsize();
 dimension frmsize=getsize();
 point loc=getlocation();
 dlg.setlocation((frmsize.width-dlgsize.width)/2+loc.x,(frmsize.
 height-dlgsize.height)/2+loc.y);
 dlg.setmodal(true);
 dlg.pack();
 //显示该辅助界面窗口
 dlg.show();
}

  3)主界面窗口的windowciosing事件监听器

void this windowclosing(windowevent e){
 //用户单击窗口系统菜单的关闭按钮,调用dispose以执行windowclosed
 dispose();
}

  4)主界面窗口的windowctosed事件监听器

void this windowclosed(windowevent e){
//退出主程序
system.exit (0);
}

  5)辅助界面窗口的“确定”按钮事件监听器

//关闭辅助界面窗口
void cancel(){
 dispose();
}
//单击“确定”按钮后触发关闭辅助界面窗口
public void actionperformed(actionevent e){
 if (e.getsource() ==buttonl){
  cancel();
 }
}
void buttonl actionperformed(actionevent e){}
class jvideoplayerframe_aboutbox_buttonl_actionadapter implements
java.awt.event.actionlistener{
 jvideoplayerframe_aboutbox adaptee;
 jvideoplayerframe_aboutbox_buttonl_actionadapter(jvideoplayerframe_aboutbox adaptee){
  this.adaptee=adaptee;
 }
public void actionperformed(actionevent e}{
 adaptee.buttonl actionperformed(e);
}

  6)辅助界面窗口的windowclosed事件监听器

//重载退出程序
protected void processwindowevent(windowevent e){
 if(e.getid() == windowevent.window_closing){
  cancel();
 }
 super.processwindowevent(e);
}

  2、设计菜单

  当我们注册了菜单项监听器,每个菜单项都有一个监听器,以监听菜单项是否有动作发生,如果有动作触发就执行相应的程序代码。完成“打开”菜单项的动作触发代码,注册的监听器为jmenufile_open_actionperformed(actionevent e),用于创建一个“打开媒体文件”对话框。下面来看看具体的代码实现。

  首先在jvideoplayerframe类中声明如下几个变量:

player player;
component visualcom,controlcom;
boolean first=true,loop=false;
string currentdirectory;
filedialog fd;

  player变量是player类的对象,它是jmf的播放器对象:visualcom和controlcom是component类的对象,分别表示视觉部件和控制面板部件:loop表示是否循环播放,first表示只播放一次;currentdirectoly表示对话框的当前目录设置为上次关闭时的目录;fd是filedialog类的对象,表示打开媒体文件对话框。

  下面来看看“打开”菜单项的动作触发执行的代码:

//打开文件
public void_jmenufile_open_actionperformed(actionevent e){
 //先创建一个对话框对象,标题设置为“打开媒体文件”
 filedialog fd=new filedialog(this,"打开媒体文件",filedialog.load);
 //然后设置该对话框的当前目录为上一次打开的目录
 fd.setdirectory(currentdirectory);
 //调用show函数显示该打开媒体文件对话框
 fd.show ();
 //如果用户放弃选择文件,则返回
 if(fd.getfile()==null)
  return;
  //设置当前目录为对话框中打开的目录,保存在currentdirectory变量中
  currentdirectory=fd.getdirectory();
  //如果jmf播放器对象存在,就关闭该播放器对象
  if(player!=null)
   player.close();
   //根据指定的目录和文件名创建一个媒体定位器(medialocator)对象,再利用该媒体定位器对象创建一个jmf播放器对象
   try{
    player =manager.createplayer(new medialocator(”file:”+fd.getdirectory() +fd.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("播放文件位置"+fd.getdirectory()+fd.getfile());
   //将jvideoplayerframe对象注册为来自jmf播放器对象的控制器事件的动作监听器
   //player.addcontrollerlistener(this);
   //最后,让jmf播放器对象预先提取媒体文件的内容
   player.prefetch();
 }

  在“打开”菜单项执行相应的动作触发代码后,会进入到播放用户选择的媒体文件阶段。

  3、播放

  当我们创建了player类的播放器对象,并且注册了player 播放器对象的控制器事件的动作监听器。下面来看看这个动作监听器,通过它才能完成播放功能。

public void controllerupdate(controllerevent e){
 //如果播放器被关闭时
 if (e instanceof controllerclosedevent){
  //如果视觉部件还存在
  if(visualcom != null) {
   //从jpanelvideo面板中删除该视觉部件
   jpanelvideo.remove(visualcom);
   visualcom = null;
  }
  //如果控制面板部件还存在
  if(controlcom !=null) {
   //从jpanelvideo面板中删除该控制面板部件
   jpanelvideo.remove(controlcom);
   controlcom =null;
  }
 return;
}
//当媒体播放结束时
if(e instanceof endofmediaevent){
 //如果带检查框的“循环播放”菜单项被选中
 if(loop) {
  //复位jmf播放器对象的开始时间
  player.setmediatime(new time(0));
  //让jmf播放器对象重新播放媒体
  player.start();
 }
 return;
}
//如果预取媒体文件内容结束时
if (e instanceof prefetchcompleteevent) {
 //让jmf播放器对象开始播放该媒体
 player.start();
 reeurn;
}
//当实例化(realize)媒体文件完成时
if(e instanceof realizecompleteevent) {
 //获取jmf播放器对象的视觉部件
 visualcom =player.getvisualcomponent();
 //如果视觉部件存在
 if(visualcom !=null)
  //将视觉部件加入到jpanelvideo面板的中央
 jpanelvideo.add(visualcom,borderlayout.center);
 //获取jmf播放器对象的控制面板部件
 controlcom =player.getcontrolpanelcomponent();
 //如果控制面板部件存在
 if(controlcom !=null)
 //将控制面板部件加入到jpanelvideo面板的底端
 jpanelvideo.add(controlcom,borderlayout.south);
 //执行pack操作
 this.pack();
 }
}

  在上面的代码中,完成了媒体文件的播放功能,对于“循环播放”菜单项注册了菜单项监听器checkboxmenultem_loop_actionperformed(actionevent e),下面来看看它的动作触发执行代码:

void jcheckboxmenultem_loop_actionperformed(actionevent e){
 //将循环播放标志取反
 loop =!loop;
}

  对于带检查框的菜单项,还要注册itemstatechanged(iternevente)事件监听器,以检查该菜单项的状态是否发生了改变。

  至此我们已经完成了播放功能,也就完成了一个媒体播放器,你可以使用自己设计的媒体播放器软件看电影和听音乐了。

扫描关注微信公众号