-
java实现播放音乐-JLayer
不久前,接了一个单子,用java的swing实现一个如下的功能
其实增删改查都好实现,主要是java怎么播放MP3音乐。然后去百度,发现了一个人家造好的轮子---JLayer
。导入jar包调用相关的api即可,下面记录一下使用方法。
1 下载JLayer
的jar包
点击下载
2 创建java项目
准备一个MP3文件放入src的文件夹下
3 编写测试代码
【TestJlayer.java】
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
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总结
5 注意
可以看到这个工具包的使用很简单,但是play() 这个方法是阻塞式的,也就同步的,程序运行的时候,音乐不放完代码是不会往下走的,这在swing开发中就会存在一种问题,在播放音乐的时候如果想切换音乐或者停止音乐,按钮是点击不了的。我的解决方案是单独启动一个线程来播放音乐。
伪代码如下:
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
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(); }
参考:https://blog.csdn.net/xietansheng/article/details/85056358
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比