求java写的Mp3播放器,要能播放MP3格式的音乐!最好有关于java手机多媒体播放器的最新详细资料

13:49 提问
java编的音乐播放器,只能播放部分MP3文件
import java.io.F
import java.io.IOE
import javax.sound.sampled.AudioF
import javax.sound.sampled.AudioInputS
import javax.sound.sampled.AudioS
import javax.sound.sampled.DataL
import javax.sound.sampled.SourceDataL
public class Player {
private S//文件路径
private S//文件名称
private AudioFormat audioF//播放格式
private AudioInputStream audioInputS//音乐播放输入流
private SourceDataLine sourceDataL// 播放设备
private boolean isStop =// 播放停止标志
* 创建对象时需要传入播放路径及文件名称
* @param path
* @param name/
public Player(String path ,String name) {
this.path =
this.name =
* 播放音乐/
public void play() {
File file = new File(path + name);
//获取音乐播放流
audioInputStream = AudioSystem.getAudioInputStream(file);
//获取播放格式
audioFormat = audioInputStream.getFormat();
/*System.out.println("取样率:"+ audioFormat.getSampleRate());
Map map = audioFormat.properties();
Iterator it =
map.entrySet().iterator();
while(it.hasNext()) {
Map.Entry m = (Entry) it.next();
System.out.println(m.getKey()+":"+m.getValue());
//其它格式音乐文件处理
if(audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, audioFormat.getSampleRate(), 16, audioFormat.getChannels(), audioFormat.getChannels()*2, audioFormat.getSampleRate(), audioFormat.isBigEndian());
audioInputStream = AudioSystem.getAudioInputStream(audioFormat, audioInputStream);
//打开输出设备
dataLineInfo = (SourceDataLine.class, audioFormat,AudioSystem.NOT_SPECIFIED);
sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
sourceDataLine.open(audioFormat);
sourceDataLine.start();
//启动播放线程
new Thread() {
public void run() {
int n = 0;
byte tempBuffer[] = new byte[320];
while(n != -1) {
//停止播放入口,如果isStop被置为真,结束播放
if(isStop)
//将音乐输入流的数据读入tempBuffer缓存
n = audioInputStream.read(tempBuffer,0 , tempBuffer.length);
//将缓存数据写入播放设备,开始播放
sourceDataLine.write(tempBuffer, 0, n);
audioInputStream.close();
sourceDataLine.drain();
sourceDataLine.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException();
}.start();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
throw new RuntimeException();
* 停止播放
public void stop() {
audioInputStream.close();
sourceDataLine.drain();
sourceDataLine.close();
} catch (IOException e) {
e.printStackTrace();
import java.awt.BorderL
import java.awt.C
import java.awt.GridL
import java.awt.event.ActionE
import java.awt.event.ActionL
import java.io.F
import java.util.V
import javax.swing.ImageI
import javax.swing.JB
import javax.swing.JFileC
import javax.swing.JF
import javax.swing.JP
import javax.swing.JScrollP
import javax.swing.JT
import javax.swing.filechooser.FileNameExtensionF
import javax.swing.table.DefaultTableM
import com.zy.play.P
public class MusicPanel extends JFrame{
private JButton add, playbtn, stopbtn, deletebtn, deleteAllbtn, upbtn,//播放、停止、删除、删除全部、向上。向下按钮
private JT //歌曲信息表
private JPanel jpl1,jpl2;
public MusicPanel() {
initCompont();
* 初始化界面
private void initCompont() {
//各个按钮赋初始值
add = new JButton("导入");
playbtn = new JButton("试听");
stopbtn = new JButton("停止");
deletebtn = new JButton("单曲删除");
deleteAllbtn = new JButton("全部删除");
upbtn = new JButton("上一首");
downbtn = new JButton("下一首");
//导入按钮点击设置
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addFile();
//试听按钮点击设置
playbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(player!=null) {
player.stop();
int rowNum = table.getSelectedRow();
if(rowNum != -1) {
player = new Player((String)table.getValueAt(rowNum, 1) + "\\" ,(String)table.getValueAt(rowNum, 0));
System.out.println((String)table.getValueAt(rowNum, 1)+"\\"+(String)table.getValueAt(rowNum, 0));
player.play();
//停止按钮点击设置
stopbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(player != null) {
player.stop();
//单曲删除按钮点击设置
deletebtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int rowNum = table.getSelectedRow();
if(rowNum != -1) {
((DefaultTableModel)table.getModel()).removeRow(rowNum);
//删除全部按钮点击设置
deleteAllbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(int i = table.getRowCount()-1; i&=0; i--) {
((DefaultTableModel)table.getModel()).removeRow(i);
downbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int n = table.getSelectedRow() + 1;
if(n & table.getRowCount()) {
table.setRowSelectionInterval(n, n);
upbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int n = table.getSelectedRow() - 1;
if(n & -1) {
n = table.getRowCount() - 1;
if(n &= 0) {
table.setRowSelectionInterval(n, n);
//添加各个按钮
jpl1= new JPanel(new GridLayout(1,7));
jpl1.add(add);
jpl1.add(playbtn);
jpl1.add(stopbtn);
jpl1.add(deletebtn);
jpl1.add(deleteAllbtn);
jpl1.add(upbtn);
jpl1.add(downbtn);
//this.setLayout(new BorderLayout());
this.add(jpl1,"North");
Vector&String& tableContent = new Vector&String&(); //表格内容
Vector&String& columnName = new Vector&String&();//歌曲信息表格列名称
columnName.add("歌曲名称");
columnName.add("存放路径");
//设置table
table = new JTable(tableContent, columnName);
table.setSelectionBackground(Color.blue);
table.setSelectionForeground(Color.LIGHT_GRAY);
jpl2=new JPanel();
jpl2.add(new JScrollPane(table), BorderLayout.CENTER);
this.add(jpl2,"Center");
this.setSize(650, 210);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
* 添加文件
private void addFile() {
JFileChooser fc =
new JFileChooser();
//设置选入文件类型
FileNameExtensionFilter filter = new FileNameExtensionFilter("mp3 or wav file", "mp3","wav","MP3","WAV");
fc.setFileFilter(filter);
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置只选择文件
fc.setMultiSelectionEnabled(true);//设置选择多个文件
int intRetVal = fc.showDialog(this, "打开");
//获取文件并添加到table
if(intRetVal == JFileChooser.APPROVE_OPTION) {
File[] file = fc.getSelectedFiles();
for(File var : file) {
name = var.getName().toLowerCase();
if( name.endsWith(".mp3")|| name.endsWith(".wav")) {
this.addMusicItem(var.getName() , var.getParentFile().getAbsolutePath());
* table的行中添加音乐文件名称name,音乐文件路径path
* @param name
* @param path
private void addMusicItem(String name, String path ) {
Vector&String& rowData = new Vector&String&();
rowData.add(name);
rowData.add(path);
//rowData.add(time);
DefaultTableModel tabMod= (DefaultTableModel) table.getModel();
tabMod.addRow(rowData);
public static void main(String[] args) {
MusicPanel test=new MusicPanel();
报错:java.io.IOException: Resetting to invalid mark
按赞数排序
一些文件格式不正确,虽然它们有mp3的扩展名,但是不是mp3的。
想要播放更多格式,请参考JJMPEG。
其他相似问题Java 音乐播放器 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 22时,
学校期末答辩项目,以酷狗音乐播放器的用户界面为原型,制作的一个基于Java&Sound,实现播放、搜索、下载的音乐播放器,支持的音乐格式只有WAV、MP3、MID。播放器的进度条不知怎么实现。和同学给它做了一些小游戏,增强些娱乐性,最后程序启动后,会在E盘创建一个Hub的文件夹,请注意下。所依赖的项目:Java&Zoom为Javax.Sound提供了MP3解码器,JAudiotagger&获取了音频文件的头信息,Jsoup&获取了网络歌曲资源数据,Substance是观感包git地址:https://git.oschina.net/JHuZhang/HubPlayer
代码片段(4)
1.&[图片] HubPlayer_1.png&&&&
2.&[图片] HubPlayer_2.jpg&&&&
HubPlayer.rar&~&3MB&&&&
(4564)&&&&
Hub Player_fat.jar&~&3MB&&&&
(2879)&&&&
开源中国-程序员在线工具:
相关的代码(85)
17回/26697阅
40回/26123阅
49回/18838阅
23回/18412阅
15回/13408阅
55回/10519阅
30回/10178阅
30回/7818阅
10回/7892阅
16回/7457阅
2楼:gzwxn 发表于
Looks great!
3楼:MikasaLeslie 发表于
不错,一开始以为是Javafx写的呢!
4楼:Spacky 发表于
5楼:锦湖 发表于
谢谢,大家!
还有一些问题:进度条的播放时间在播放网络歌曲时,时间不准的。公式是:时间=文件总字节数*8/比特率,这样计算是不准的。播放本地歌曲是用
JAudiotagger 获取这个时间的(JAudiotagger 不能获取网络资源) 网络资源是从百度音乐抓取的,因为百度音乐经常变动它的代码,所以这个程序的网络功能是不稳定的,我把抓取的数据保存到本地E:Hub/SongLibrary.dat,算是应急。
JTable在删除行时,会报出数组越界异常,不知在哪捕获它。
6楼:wxw_cool 发表于
加油,支持.....
7楼:drongHua 发表于
请问一下这位同学,这个是
Javafx写的吧
8楼:朱宏青 发表于
来搞一个web版的?
9楼:xkjava 发表于
看看,还没写过类似的东西
10楼:YoungSql 发表于
11楼:chenw 发表于
12楼:yqin 发表于
13楼:锦湖 发表于
恩 是的,那不是javafx,是jdk1.8的特性
14楼:ShowHeart 发表于
很好的分享,下来试一下。
15楼:vivid 发表于
16楼:liraygo 发表于
JAVA做成这样的界面,不错了
17楼:Sheamus 发表于
JDK8的新东西。。。
18楼:忠 发表于
19楼:狸大叔 发表于
大神,用&ActionListener写上一曲下一曲怎么写呢?
20楼:新浪雅虎 发表于
怎么用?求大神指教,找不到ant
开源从代码分享开始
锦湖的其它代码

我要回帖

更多关于 手机多媒体播放器 的文章

 

随机推荐