Odtwarzacz mp3

0

Witam, chciałem napisać prosty program do odtwarzania plików mp3. Mam problem z poprawnym działaniem mojego programu gdyż, po naciśnięciu przycisku "Play" nic już nie da sie zrobić tzn. nie da się kliknąć żadnego innego przycisku. Jeśli ktoś mógłby mi doradzić jak z tym sobie poradzić byłbym ogromnie wdzięczny. Pozdrawiam
Tutaj jest kod Mp3Playera:

package com.hubberspot.example;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import javazoom.jl.player.Player;

public class Mp3Player {

    private String filename;
    private Player player;

    public Mp3Player(String filename) 
    {
        this.filename = filename;
    }
    public void play() 
    {
        try 
        {  
            BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(filename));
            player = new Player(buffer);
            player.play();
        }
        catch (Exception e) 
        {
            System.out.println(e);
        }
    }
    }

a tutaj kod ramki:

package com.hubberspot.example;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Ramka extends JFrame 
{
    private JPanel contentPane;
    public static void main(String[] args) 
    {
        EventQueue.invokeLater(new Runnable() 
        {
            public void run() 
            {
                try 
                {
                    Ramka frame = new Ramka();
                    frame.setVisible(true);
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
        });
    }
    private JButton btnPlay, btnStop;
    Mp3Player mp3 = new Mp3Player("C:\\Documents and Settings\\dell\\Moje dokumenty\\Downloads\\song.mp3");
    public Ramka() 
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        btnPlay = new JButton("Play");
        btnPlay.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                    mp3.play();
            }
        });
        btnPlay.setBounds(155, 127, 89, 23);
        contentPane.add(btnPlay);

        btnStop = new JButton("Stop");
        btnStop.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent e) 
            {
                dispose();
            }
        });
        btnStop.setBounds(155, 161, 89, 23);
        contentPane.add(btnStop);
    }
}
1

Widocznie klasa Player nie tworzy przy odtwarzaniu muzyki nowego wątku. Musisz wywołanie metody play() umieścić w nowym wątku.
Prosty sposób korzystający z klasy SwingWorker:

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import javazoom.jl.player.Player;
import javax.swing.*;

public class Mp3Player extends SwingWorker<String,Object>
{

    private String filename;
    private Player player;

    public Mp3Player(String filename) 
    {
        this.filename = filename;
    }
    public String doInBackground() 
    {
        try 
        {  
            BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(filename));
            player = new Player(buffer);
            player.play();
        }
        catch (Exception e) 
        {
            System.out.println(e);
        }
        return "";
    }
}
...
btnPlay.addActionListener(new ActionListener() 
{
    public void actionPerformed(ActionEvent e) 
    {
        mp3.execute();
    }
});
0

Dzięki wielkie, wszystko pięknie działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0