0

私は、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ファイルを再生できる優れたライブラリをお勧めします。よろしくお願いします。ご提案をお待ちしております。

4

2 に答える 2

0

スレッドの問題を修正しました。私は解決策を置きます、多分誰かを助けるでしょう。

     static int fileRunning = 0;

     public void playMp3(FileInputStream file) throws JavaLayerException{

         if (fileRunning == 0){

             mp3Player = new Player(file);

             playerThread = new Thread(this);
             playerThread.start();

             fileRunning = 1;

         }
     }

したがって、主なアイデアは、曲の再生を開始すると、そのintは値1を取り、0にはならないため、これ以上スレッドを作成できないということです。

于 2013-03-21T13:52:22.083 に答える
0

再生ボタンを押してスレッドが開始された後にこれを使用すると、プレーヤーが開始するとボタンが無効になり、曲が完了すると再び有効になります

    yourplaybutton.setEnabled(false);
于 2013-04-27T16:24:47.610 に答える