0

Javaで簡単なMP3Playerを作っています。.mp3 ファイルを再生できましたが、再生を開始するとプログラム全体がフリーズし、プログラムのボタンをクリックできません。再生を開始した後、一時停止ボタンまたはその他のボタンが機能するように助けが必要です。これは私のコードです:

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.InputStream;
    import java.net.URL;
    import javazoom.jl.player.advanced.AdvancedPlayer;
    import javax.swing.*;

    public class MP3Player extends JFrame{

    public MP3Player(){
        JPanel jpBottom = new JPanel();
        JButton btnPlay = new JButton("Play");
        JButton btnPause = new JButton("Pause");

        jpBottom.add(btnPause);
        jpBottom.add(btnPlay);

        Container cp = this.getContentPane();
        BorderLayout bl = new BorderLayout();
        cp.setLayout(bl);
        cp.add(jpBottom, BorderLayout.SOUTH);

        btnPlay.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        Play("file:///C://a.mp3");
                    }
                }
        );

        this.setVisible(true);
        this.setSize(250, 100);
        this.setTitle("MP3 Player");
        this.setLocation(100, 100);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void Play(String path){
        try{
            URL url = new URL(path);
            InputStream in = url.openStream();
            //Player pl = new Player(in);
            //pl.play();
            AdvancedPlayer pl = new AdvancedPlayer(in);

            pl.getPlayBackListener();
            pl.play();             
        }
        catch(Exception e){
            System.out.println("Feil: "+e);
        }
    }

    public static void main(String[] args) {
        MP3Player n = new MP3Player();
    }
}
4

2 に答える 2

1

一時停止ボタンの作成についてサポートが必要です。

プレーヤーを一時停止する方法はですstop()。しかし、そのコードはAdvancedPlayerローカルをメソッドに作成します。代わりに、クラスは属性を宣言し、メソッド AdvancedPlayerでそのクラス属性を参照する必要があります。actionPerformed()

于 2012-05-26T11:07:27.703 に答える
1

別のスレッドでメソッドを呼び出す必要があり、Swing でのマルチスレッドPlay()化についても十分に理解している必要があります。少なくともあなたは読むべきですSwingUtilities.invokeLater()

于 2012-05-26T10:50:09.010 に答える