Java常用的一些多媒体文件基本操作方法简介
播放幻灯片和动画
用实例说明播放幻灯片和动画的方法。
【例】小应用程序先将幻灯片读入数组在存储,单击鼠标变换幻灯片,逐张显示。
importjava.applet.*importjava.awt.*; importjava.awt.event.*; publicclassExample7_7extendsAppletimplementsMouseListener{ finalintnumber=50;//假定幻灯片有50张 intcount=0; Image[]card=newImage[number]; publicvoidinit(){ addMouseListener(this); for(inti=0;i<number;i++){ card[i]=getImage(getCodeBase(),"DSC0033"+i+".jpg"); } } publicvoidpaint(Graphicsg){ if((card[count])!=null) g.drawImage(card[count],10,10,card[count].getWidth(this),card[count].getHeitht(this),this); } publicvoidmousePressed(MouseEvente){ count=(count+1)%number;//循环逐张显示 repaint(); } publicvoidmouseRelease(MouseEvente){} publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} publicvoidmouseClicked(MouseEvente){} }
【例】小应用程序说明播放动画的方法,要求播放的图片和小程序放在相同的目录中,程序通过快速显示一组图片造成显示动画的效果。小应用程序利用线程控制动画图片的逐显示。
importjava.applet.*; importjava.awt.*; importjava.awt.event.*; publicclassExample7_8extendsAppletimplementsRunnable{ finalintnumber=50; intcount=0; Threadmythread; Image[]pic=newImage[number]; publicvoidinit(){ setSize(300,200); for(inti=0;i<=number;i++){ //载入动画图片 pic[i-1]=getImage(getCodeBase(),"DSC0033"+i+".jpg"); } } publicvoidstart(){ mythread=newThread(this);//创建一个线程 mythread.start();//启动线程执行 } publicvoidstop(){ mythread=null; } publicvoidrun(){ //线程的执行代码 while(true){ repaint(); count=(count+1)%number;//改变显示的图片号 try{ mhythread.sleep(200); } catch(InterruptedExeceptione){} } } publicvoidpaint(Graphicsg){ if((pic[count]!=null) g.drawImage(pic[count],10,10,pic[count].getwidth(this),pic[count].getHeight(this),this); } }
播放声音
Java语言老根据地的音频格式有多种:au、aiff、wav、midi、rfm等。小程序要播放音频文件,可使用类AudioClip,该类在java.applet.AudioClip类库中定义。小程序先创建AudioClip对象,并用getAudioClip()方法为其初始化。代码形式如下:
AudioClipaudioClip=getAudioClip(getCodeBase(),”myAudioClipFile.au”);
如果要从网上获得音频文件,可用方法getAudioClip(URLurl,Stringname),根据url地址及音频文件name获得可播放的音频对象。
控制声音的播放有3个方法:play()播放声音,loop()循环播放和stop()停止播放。
【例】能播放声音的小应用程序。
importjava.applet.*; importjava.awt.*; importjava.awt.event.*; publicclassExample7_9extendsAppletimplementsActionListener{ AudioClipclip;//声明一个音频对象 ButtonbuttonPlay,buttonLoop,buttonStop; publicvoidinit(){ clip=getAudioClip(getCodeBase(),"2.wav"); //根据程序所在地址处声音文件2.wav创建音频对象, //Applet类的getCodeBase()方法可以获得小程序所在的html页面的URL地址。 buttonPlay=newButton("开始播放"); buttonLoop=newButton("循环播放"); buttonStop=newButton("停止播放"); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListener(this); add(buttonPlay); add(buttonLoop); add(buttonStop); } publicvoidstop(){ clip.stop();//当离开此页面时停止播放 } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==buttonPlay){ clip.play(); } elseif(e.getSource()==buttonLoob){ clip.loop(); } elseif(e.getSource()==buttonStop){ clip.stop(); } } }
【例】如果声音文件较大或网络速度慢会影响小程序的初始化工作。这可用多线程技术解决。在一个级别较低的线程中完成音频对象的创建,即由后台载入声音文件,前台播放。
importjava.applet.*; importjava.awt.*; importjava.awt.event.*; publicclassHanoiextendsappletimplementsRunnable,ActionListener{ AudioClipclip;//声明一个音频对象 textFieldtext; Threadthread; ButtonbuttonPlay,buttonLoop,buttonStop; publicvoidinit(){ thread=newThread(this);//创建新线程 thread.setPriority(Thread.MIN_PRIORITY); buttonPlay=newButton("开始播放"); buttonLoop=newButton("循环播放"); buttonStop=newButton("停止播放"); text=newtextField(12); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListener(this); add(buttonPlay); add(buttonLoop); add(buttonStop); add(text); } publicvoidstart(){ thread.start(); } publicvoidstop(){ clip.stop(); } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==buttonPlay(){ clip.play(); } elseif(e.getSource()==buttonLoop(){ clip.loop(); } elseif(e.getSource()==buttonStop(){ clip.stop(); } } publicvoidrun(){ //在线程thread中创建音频对象 clip=getAudioclip(getCodeBase(),"2.wav"); text.setText("请稍等"); if(clip!=null){ buttonPlay.setBackground(Color.red);buttonLoop.setBackground(Color.green);text.setText("您可以播放了"); }//获得音频对象后通知可以播放 } }