不久前,接了一個單子,用java的swing實現一個如下的功能
其實增刪改查都好實現,主要是java怎么播放MP3音樂。然后去百度,發現了一個人家造好的輪子---JLayer
。導入jar包調用相關的api即可,下面記錄一下使用方法。
1 下載JLayer
的jar包
2 創建java項目
准備一個MP3文件放入src的文件夾下
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總結
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();
}
參考:https://blog.csdn.net/xietansheng/article/details/85056358