Java常用的一些多媒體文件基本操作方法簡介
播放幻燈片和動(dòng)畫
用實(shí)例說明播放幻燈片和動(dòng)畫的方法。
【例】小應(yīng)用程序先將幻燈片讀入數(shù)組在存儲(chǔ),單擊鼠標(biāo)變換幻燈片,逐張顯示。
import java.applet.*import java.awt.*; import java.awt.event.*; public class Example7_7 extends Applet implements MouseListener{ final int number = 50; //假定幻燈片有50張 int count = 0; Image[] card = new Image[number]; public void init(){ addMouseListener(this); for (int i = 0; i < number; i++){ card[i] = getImage(getCodeBase(), "DSC0033" + i + ".jpg"); } } public void paint(Graphics g){ if ((card[count]) != null) g.drawImage(card[count], 10, 10, card[count].getWidth(this),card[count].getHeitht(this), this); } public void mousePressed(MouseEvent e){ count = (count + 1) % number; //循環(huán)逐張顯示 repaint(); } public void mouseRelease(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(Mouse Event e){} public void mouseClicked(MouseEvent e){} }
【例】小應(yīng)用程序說明播放動(dòng)畫的方法,要求播放的圖片和小程序放在相同的目錄中,程序通過快速顯示一組圖片造成顯示動(dòng)畫的效果。小應(yīng)用程序利用線程控制動(dòng)畫圖片的逐顯示。
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Example7_8 extends Applet implements Runnable{ final int number = 50; int count = 0; Thread mythread; Image[] pic = new Image[number]; public void init(){ setSize(300, 200); for (int i = 0; i <= number; i++){ //載入動(dòng)畫圖片 pic[i - 1] = getImage(getCodeBase(), "DSC0033" + i + ".jpg"); } } public void start(){ mythread = new Thread(this); //創(chuàng)建一個(gè)線程 mythread.start(); //啟動(dòng)線程執(zhí)行 } public void stop(){ mythread = null; } public void run(){ //線程的執(zhí)行代碼 while (true){ repaint(); count = (count + 1) % number; //改變顯示的圖片號 try{ mhythread.sleep(200); } catch (InterruptedExeception e){} } } public void paint(Graphics g){ if ((pic[count] != null) g.drawImage(pic[count], 10, 10, pic[count].getwidth(this), pic[count].getHeight(this), this); } }
播放聲音
Java語言老根據(jù)地的音頻格式有多種:au、aiff、wav、midi、rfm等。小程序要播放音頻文件,可使用類AudioClip,該類在java.applet.AudioClip類庫中定義。小程序先創(chuàng)建AudioClip對象,并用getAudioClip()方法為其初始化。代碼形式如下:
AudioClip audioClip = getAudioClip(getCodeBase(),”myAudioClipFile.au”);
如果要從網(wǎng)上獲得音頻文件,可用方法getAudioClip(URL url, String name),根據(jù)url地址及音頻文件name獲得可播放的音頻對象。
控制聲音的播放有3個(gè)方法:play()播放聲音,loop()循環(huán)播放和stop()停止播放。
【例】能播放聲音的小應(yīng)用程序。
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Example7_9 extends Applet implements ActionListener{ AudioClip clip; //聲明一個(gè)音頻對象 Button buttonPlay, buttonLoop, buttonStop; public void init(){ clip = getAudioClip(getCodeBase(), "2.wav"); //根據(jù)程序所在地址處聲音文件2.wav創(chuàng)建音頻對象, //Applet類的getCodeBase()方法可以獲得小程序所在的html頁面的URL地址。 buttonPlay = new Button("開始播放"); buttonLoop = new Button("循環(huán)播放"); buttonStop = new Button("停止播放"); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListener(this); add(buttonPlay); add(buttonLoop); add(buttonStop); } public void stop(){ clip.stop(); //當(dāng)離開此頁面時(shí)停止播放 } public void actionPerformed(ActionEvent e){ if (e.getSource() == buttonPlay){ clip.play(); } else if (e.getSource() == buttonLoob){ clip.loop(); } else if (e.getSource() == buttonStop){ clip.stop(); } } }
【例】如果聲音文件較大或網(wǎng)絡(luò)速度慢會(huì)影響小程序的初始化工作。這可用多線程技術(shù)解決。在一個(gè)級別較低的線程中完成音頻對象的創(chuàng)建,即由后臺(tái)載入聲音文件,前臺(tái)播放。
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Hanoi extends applet implements Runnable, ActionListener{ AudioClip clip; //聲明一個(gè)音頻對象 textField text; Thread thread; Button buttonPlay, buttonLoop, buttonStop; public void init(){ thread = new Thread(this); //創(chuàng)建新線程 thread .setPriority(Thread.MIN_PRIORITY); buttonPlay = new Button("開始播放"); buttonLoop = new Button( "循環(huán)播放"); buttonStop = new Button("停止播放"); text = new textField(12); buttonPlay.addActionListener(this); buttonStop.addActionListener(this); buttonLoop.addActionListener(this); add(buttonPlay); add(buttonLoop); add(buttonStop); add(text); } public void start(){ thread.start(); } public void stop(){ clip.stop(); } public void actionPerformed(ActionEvent e){ if (e.getSource() == buttonPlay(){ clip.play(); } else if (e.getSource() == buttonLoop(){ clip.loop(); } else if (e.getSource() == buttonStop(){ clip.stop(); } } public void run(){ //在線程thread 中創(chuàng)建音頻對象 clip = getAudioclip(getCodeBase(), "2.wav"); text.setText("請稍等"); if(clip ! = null){ buttonPlay.setBackground(Color.red); buttonLoop.setBackground(Color.green); text.setText("您可以播放了"); } //獲得音頻對象后通知可以播放 } }
相關(guān)文章
java實(shí)現(xiàn)十六進(jìn)制字符unicode與中英文轉(zhuǎn)換示例
當(dāng)需要對一個(gè)unicode十六進(jìn)制字符串進(jìn)行編碼時(shí),首先做的應(yīng)該是確認(rèn)字符集編碼格式,在無法快速獲知的情況下,通過一下的str4all方法可以達(dá)到這一目的2014-02-02Java集合定義與用法實(shí)例總結(jié)【Set、List與Map】
這篇文章主要介紹了Java集合定義與用法,結(jié)合實(shí)例形式總結(jié)分析了Java集合中Set、List和Map相關(guān)概念、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2018-08-08Java在長字符串中查找短字符串的實(shí)現(xiàn)多種方法
這篇文章主要介紹了Java在長字符串中查找短字符串的實(shí)現(xiàn)多種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12@MapperScan和@ComponentScan一塊使用導(dǎo)致沖突的解決
這篇文章主要介紹了@MapperScan和@ComponentScan一塊使用導(dǎo)致沖突的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息
這篇文章主要介紹了Springboot如何使用OSHI獲取和操作系統(tǒng)和硬件信息問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10