当前位置: 首页 > 知识库问答 >
问题:

在java问题中使用JLayer在一个线程中只播放一个mp3文件

宰父深
2023-03-14

我在一个音频播放器工作,它是用Java和gui编写的。为了播放mp3文件,我选择了javazoom中的JLayer库,因为我看到它非常流行和使用。我制作了GUI,设法从播放列表中播放选定的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文件。事先谢谢你,我在等你的建议。

共有1个答案

鄢松
2023-03-14

在您按下播放按钮并且线程已启动后使用此功能。一旦播放器启动,按钮将禁用,并在歌曲完成后再次启用

    yourplaybutton.setEnabled(false);
 类似资料:
  • 我写了一个应用程序来播放mp3文件,我有控制和一切滚动,只是一个问题,每个mp3文件是单独播放,我必须触发一个新的文件播放。 我想知道我如何(按语法)判断玩家是否已经完成了一个文件的播放,这样我就可以继续下一个文件了? 这是线程代码

  • 我正在创建一个带有背景音乐的应用程序。我试着在课堂上演奏那首音乐: 我试过了: 当我把它放在我的文件的根目录中并使用它时: 我得到这个错误:javax.sound.sampled。不受支持的AudioFileException:无法从输入URL获取音频输入流更新我尝试使用JavaFX: 但是我得到了错误: 此行中的错误:MediaPlayer Player=new MediaPlayer(媒体);

  • null 关键是我使用jLayer的实现不起作用:当我执行play-pause-resume时,音频被暂停,但随后从文件中的随机点恢复。 我该怎么修好它?

  • 问题内容: 如何在以下代码中添加“播放/暂停”按钮? 问题答案: 您需要使用该类而不是just类,因为更简单的类不能真正开始在中间播放文件。 您需要添加一个并监听该方法。然后,您可以从停下来的那一刻起重新开始。 这将记住播放的帧已暂停(如果已暂停)。 现在,在暂停后再次按Play键时,您将检查文件中的数字是否介于0和帧数之间,然后调用。 请注意,在执行此操作之前,您应该知道文件中的帧数。如果没有,

  • 问题内容: 如何在Java应用程序中播放和文件?我正在使用。我尝试在互联网上查找类似以下示例的内容: 但是,这只会播放文件。 问题答案: 如何在Java应用程序中播放和文件?我正在使用。我尝试在互联网上查找类似以下示例的内容: 但是,这只会播放文件。