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("您可以播放了");
}//获得音频对象后通知可以播放
}
}