我正在使用带有 GUI 的 Java 编写的音频播放器。为了播放 mp3 文件,我选择了 javazoom 的 JLayer 库,因为我看到它非常流行和使用。我制作了 GUI,设法从播放列表中播放选定的 mp3 文件。
我的问题是,如果我多次按下播放按钮或播放列表中的文件,它将开始播放歌曲的次数与我按下它的次数一样多,我想在同一个线程中播放它;如果我再次按下播放按钮,我想再次播放而不是在播放当前歌曲时开始播放同一首歌曲。
这是我播放 mp3 文件的代码:
public class Playing implements Runnable{
private Player mp3Player;
private Thread playerThread;
public void createPlayer(FileInputStream file) throws JavaLayerException{
mp3Player = new Player(file);
playerThread = new Thread(this);
playerThread.start();
}
@Override
public void run(){
try {
mp3Player.play();
}
catch (JavaLayerException ex) {
Logger.getLogger(Playing.class.getName()).log(Level.SEVERE, null, ex);
}
}
这是我的播放按钮方法:
public void createPlayButton(){
play = new JButton();
playButton = new ImageIcon("D:/Audio Player/Images/playButton.png");
play.setBounds(125, 100, 50, 50);
play.setIcon(playButton);
play.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < select.getFilesPath().size(); i++){
if (select.getFilesPath().get(i).toString().contains(playlistBody.getSongName())){
try {
mp3Player.createPlayer(new FileInputStream(new File(select.getFilesPath().get(i).toString())));
} catch (JavaLayerException ex) {
Logger.getLogger(PlayerBody.class.getName()).log(Level.SEVERE, null, ex);
} catch (FileNotFoundException ex) {
Logger.getLogger(PlayerBody.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
});
}
我提到我是多线程的新手,所以不要对我这么苛刻。如果我不能用 JLayer 做到这一点,请向我推荐一个可以播放 mp3 文件的好库。提前感谢您,我正在等待您的建议。