简单的音乐播放器一、程序代码:import java.io.File;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.FileDialog;import java.awt.Frame;import java.awt.GridLayout;import bel;import java.awt.List;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.MenuShortcut;import java.awt.Panel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled.SourceDataLine;public class Example extends Frame {private static final long serialVersionUID = 1L;boolean isStop = true;// 控制播放线程boolean hasStop = true;// 播放线程状态String filepath;// 播放文件目录String filename;// 播放文件名称AudioInputStream audioInputStream;// 文件流AudioFormat audioFormat;// 文件格式SourceDataLine sourceDataLine;// 输出设备List list;// 文件列表Label labelfilepath;//播放目录显示标签Label labelfilename;//播放文件显示标签Button buttonNext,buttonLast,buttonStop;//上、下一首按钮int songNum,i;public Example() {// 设置窗体属性setLayout(new BorderLayout());setTitle("黄丽敏--音乐播放器");setSize(300,450);// 建立菜单栏MenuBar menubar = new MenuBar();Menu menufile = new Menu("文件");MenuItem menuopen = new MenuItem("打开", new MenuShortcut(KeyEvent.VK_O));MenuItem itemExit=new MenuItem("退出");itemExit.setShortcut(new MenuShortcut(KeyEvent.VK_E));menufile.add(menuopen);menufile.add(itemExit);menufile.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {open();}});itemExit.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.exit(0);}});menubar.add(menufile);setMenuBar(menubar);// 文件列表list = new List(10);list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) {// 双击时处理if (e.getClickCount() == 2) {// 播放选中的文件filename = list.getSelectedItem();play();}}});list.setBackground(Color.pink);add(list, "Center");// 信息显示Panel panel = new Panel(new GridLayout(0, 1)); labelfilepath = new Label("正在播放:"); labelfilename = new Label("播放列表"); labelfilename.setForeground(Color.red);buttonLast=new Button("上一首");buttonLast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { songNum=list.getSelectedIndex();if(songNum>0){list.select(songNum-1);filename = list.getItem(songNum-1);play();}}});//**************************************** buttonStop=new Button("停止");buttonStop.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) { isStop=true;}});//***************************************** buttonNext=new Button("下一首");buttonNext.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { songNum=list.getSelectedIndex();if((songNum+1)<list.getItemCount()){list.select(songNum+1);filename = list.getItem(songNum+1);play();}}});buttonNext.setBackground(Color.ORANGE); buttonLast.setBackground(Color.BLUE);buttonStop.setBackground(Color.GRAY);panel.add(labelfilepath);panel.add(buttonLast);panel.add(buttonStop);panel.add(buttonNext);panel.add(labelfilename);add(panel, "North");// 注册窗体关闭事件addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) { System.exit(0);}});setVisible(true);}// 打开private void open() {FileDialog dialog = new FileDialog(this, "Open", 0);dialog.setVisible(true);filepath = dialog.getDirectory();if (filepath != null) {labelfilepath.setText("音乐路径:" + filepath);// 显示文件列表list.removeAll();File filedir = new File(filepath);File[] filelist = filedir.listFiles();for (File file : filelist) {String filename = file.getName().toLowerCase();if (filename.endsWith(".wav")||filename.endsWith(".mp3")) { list.add(filename);}}}}// 播放private void play() {try {isStop = true;// 停止播放线程// 等待播放线程停止System.out.print("开始播放:" + filename);while (!hasStop) {System.out.print(".");try {Thread.sleep(10);} catch (Exception e) {}}System.out.println("");File file = new File(filepath + filename);labelfilepath.setText("正在播放:" + filename);// 取得文件输入流audioInputStream = AudioSystem.getAudioInputStream(file);audioFormat = audioInputStream.getFormat();// 转换wav文件编码if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) { audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,audioFormat.getSampleRate(), 16, audioFormat.getChannels(), audioFormat.getChannels() * 2,audioFormat.getSampleRate(), false);audioInputStream = AudioSystem.getAudioInputStream(audioFormat,audioInputStream);}// 打开输出设备 dataLineInfo = new (SourceDataLine.class, audioFormat,AudioSystem.NOT_SPECIFIED);sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);sourceDataLine.open(audioFormat);sourceDataLine.start();// 创建独立线程进行播放isStop = false;Thread playThread = new Thread(new PlayThread());playThread.start();} catch (Exception e) {e.printStackTrace();}//play();}public static void main(String args[]) {new Example();}// 播放线程class PlayThread extends Thread {byte tempBuffer[] = new byte[320];public void run() {try {int cnt;hasStop = false;// 读取数据到缓存数据while ((cnt = audioInputStream.read(tempBuffer, 0,tempBuffer.length)) != -1) {if (isStop)break;if (cnt > 0) {// 写入缓存数据sourceDataLine.write(tempBuffer, 0, cnt);}}// Block等待临时数据被输出为空sourceDataLine.drain();sourceDataLine.close();hasStop = true;} catch (Exception e) {e.printStackTrace();System.exit(0);}}}}二、程序运行结果:1、运行结果如下:2、打开文件:附:该播放器只能打开以.mp3与.wma为后缀的格式文件,编译器默认情况下只能播放.wma 后缀的音频文件,要想播放.mp3格式的文件需要另外导入一些包,如下图就是此程序导入的包。