JBuilder建造音频播放措施
副标题#e#
Java是当当代界上很是风行的一种编程语言。它是由美国SUN计较机公司(Sun Microsystems, Inc.)所研究而成的,是一种为Internet成长而打破用户端呆板情况和CPU布局、写一次即可在任何呆板上执行(Write Once,Run Anywhere)的语言。
先容完Java的特性与优势后,我将开始先容如何建造音频播放措施。Java中有很多可以建造音频播放的包和类,包罗java.applet.AudioClip、com.sun.media.sound.JavaSoundAudioClip和javax.sound.midi.spi&javaw.sound.sampled.spi等,个中java.applet.AudioClip是从JDK1.0就存在的一个接口,其余的多个类是对这个接口的实现及富厚其成果。
下面,我将教育各人操作com.sun.media.sound中的JavaSoundAudioClip类建造一个简朴的音频播放器小措施。
我回收的是Borland公司的JBuilder,这是一个大型的Java集成开拓情况。
我们共建设4个类,如下表:
类名 | MyFrame | AudioPlay | GifPanel | Test |
成果 | 界面GUI | 播放音频文件 | 存放gif图片的面板 | 测试类 |
1.生成Application的GUI
首先,操作JBuilder的Wizard自动生成一个带有菜单栏的Application,然后在Frame中添加控件。如下所示:
范例 | JList | JButton | JButton | JButton | JButton | JFileChooser |
名称 | jList1 | jBtnBack | jBtnPlay | jBtnStop | jBtnForward | fileChooser |
成果 | 播放列表 | 退却 | 播放 | 遏制 | 前进 | 打开文件对话框 |
在按钮的下面添加jList作为播放列表,为了制止画面的单调,我们在右边添加一幅gif,为了便于对gif举办打点,我们为它建造了一个面板,组成GifPanel类。完成后的界面如下图所示:
#p#副标题#e#
2.结构AudioPlay类--音频播放wav,留意异常处理惩罚
需要留意的是,当播放时,界面上的各个按钮该当仍然可以对用户的操纵举办事件响应,所以至少需要两个线程:一个节制歌曲的播放,别的一个对用户事件举办响应。因此我们的AudioPlay类需要实现Runable接口,以利用多线程技能。按照JDK的表明-JDK1.4.0,任何需要由线程执行的实例都该当实现Runable接口,并且由于我们只需要重写run()要领和stop()要领,并给start()要领多态化,所以我们选择实现Runable接口,这样就可以不需要担任Thread类而利用Thread类的实例来运行了。
package myplayer;
import com.sun.media.sound.JavaSoundAudioClip;
import java.io.*;
/**
* <p>Title: 音频播放器</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author 放飞网
* @version 1.0
*/
public class AudioPlay
implements Runnable {
private JavaSoundAudioClip locate, warning;
protected boolean threadExit;
protected boolean stopped;
protected boolean playing;
Thread playerThread;
public AudioPlay() {
}
public void start(File f) {
playing = true;
stopped = false;
try {
FileInputStream ff = new FileInputStream(f);
locate = new JavaSoundAudioClip(ff);
}
catch (Exception e) {
System.out.println("error");
}
playerThread = new Thread(this);
playerThread.start();
}
public void run() {
if (playing) {
if (!stopped) {
if (locate == null)
System.out.print("nulll");
try {
locate.play();
System.out.print("test");
}
catch (Exception ee) {}
}
}
}
public void stop() {
stopped = true;
threadExit = true;
if (playing == true) {
playing = false;
locate.stop();
}
}
public void pause() {
if (playing == true) {
locate.stop();
}
}
}
3.设计文件过滤FileFilter
#p#分页标题#e#
我们在利用Windows窗口打开文件时,常常会在文件范例的下拉框中看到多种相应的范例,这样可以限定用户所可以或许选定的文件范例,也可以提高用户选择文件的速度,因为这样将会只显示相应范例的文件。
而Java中也提供了相应的类可以完成这一成果。
javax.swing.filechooser.FileFilter是一个界说好的抽象类,实现了文件过滤器的根基成果。它只有两个要领:public abstract boolean accept(File f)和public abstract String getDescription()。由于文件过滤器在我们的措施中只用于Frame窗口中,所以鉴于封装性,我们将其界说为MyFrame的内部类,如下所示:
// JScript source code
class WavFileFilter
extends javax.swing.filechooser.FileFilter {
/**
* 内部类
* wav文件过滤器,用于打开文件对话框
*/
String ext; // 文件扩展名
WavFileFilter(String ext) {
this.ext = ext;
}
/**
* 包围性要领
* 参数所暗示的文件是一个路径名照旧一个真实的文件名
* @param file 将给打开的文件
* @return 假如是路径, 返回true, 不然返回false
*/
public boolean accept(File file) {
if (file.isDirectory()) // 是目次,打开
return true;
String fileName = file.getName();
int index = fileName.lastIndexOf('.');
if (index > 0 && index < fileName.length() - 1) {
// 暗示文件名称不为".xxx"与"xxx."之范例
String extension = fileName.substring(index + 1).toLowerCase();
if (extension.equals(ext))
return true;
}
return false;
}
/**
* 给出对特定文件范例的描写
* @return 对文件范例的描写
*/
public String getDescription() { // 返回描写文件的说明字符串
if (ext.equals("wav"))
return "Wav File (*.wav)";
return "";
}
}
}
4.配置成Windows名目
Java具有跨平台的特性,同时造成它的界面也较量独具“本性”。为了使界面越发雅观,切合大大都Windows平台利用者的习惯,我们可以在Frame中加上下面一段代码:
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new Test(); // 初始化所要现实的窗体
}
catch(Exception e) {
e.printStackTrace();
}
个中,javax.swing.UIManager可以获取和配置外观。getSystemLookAndFeelClassName()要了解自动已往当前系统平台,在通过setLookAndFeel要领就可以举办配置了。