java實現播放音樂-JLayer


不久前,接了一個單子,用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();
}

參考:https://blog.csdn.net/xietansheng/article/details/85056358


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM