公告
淡泊明志,宁静致远
网站资讯
本站文章字数合计
243.7k
本站Hexo版本
6.1.0
本站Node版本
16.14.2
本站已运行时间
最后更新时间

分类: java | 标签: java

java实现播放音乐-JLayer

发表于: 2021-08-27 18:00:28 | 字数统计: 541 | 阅读时长预计: 2分钟

不久前,接了一个单子,用java的swing实现一个如下的功能

image-20210827171756876

其实增删改查都好实现,主要是java怎么播放MP3音乐。然后去百度,发现了一个人家造好的轮子—JLayer。导入jar包调用相关的api即可,下面记录一下使用方法。

1 下载JLayer的jar包

点击下载

2 创建java项目

准备一个MP3文件放入src的文件夹下

image-20210827173044986

3 编写测试代码

【TestJlayer.java】

package com.qy.jlayer;
import java.io.File;
import java.io.FileInputStream;
import javazoom.jl.player.Player;

public class TestJlayer {
    public static void main(String[] args) throws Exception{
        File file = new File("src/1.mp3");
        Player player = new Player(new FileInputStream(file));
        player.play();//播放音乐
        //player.close();//停止音乐
    }
}

4 常用api总结

image-20210827173553935

5 注意

可以看到这个工具包的使用很简单,但是play() 这个方法是阻塞式的,也就同步的,程序运行的时候,音乐不放完代码是不会往下走的,这在swing开发中就会存在一种问题,在播放音乐的时候如果想切换音乐或者停止音乐,按钮是点击不了的。我的解决方案是单独启动一个线程来播放音乐。

伪代码如下:

public class MusicIndexFrm extends JFrame {
    //第一步定义
    private Player player ;//播放对象
    private Music playMusic;//正在播放的音乐,如果没有则为null 这个Music类是自己封装的,里面定义了音乐相关信息,比如歌名,路径等
    
    //第二步:核心在这里 自定义线程类,来播放音乐
    private class MyRunnable implements Runnable{//1.实现Runnable接口
          public void run() {//2.重写run方法
             try {
                if(null != player){player.close();}//如果有音乐在播放先关闭,一次只放一首歌
                player = new Player(new FileInputStream(new File(playMusic.getPath())));
                player.play();//播放
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            } catch (JavaLayerException e1) {
                e1.printStackTrace();
            }
         }
    }
    
    //第三步:通过线程去播放音乐而不是直接调用play()方法
    Music music = new Music(id, name, formats, singer, path);
    playMusic = music;//将正在播放的音乐保存
    //播放音乐,此处要启动一个线程去播放,不然窗口动不了
    new Thread(new MyRunnable()).start();
}
------ 本文结束,感谢您的阅读 ------
本文作者: 贺刘芳
版权声明: 本文采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。