JMF - Quase lá! (TÓPICO RESOLVIDO)

7 respostas
B

Galera,

Estou executando um arquivo de audio (.wav) usando JMF. Estou conseguindo executar o arquivo normalmente, só que eu IMAGINAVA que na execução do arquivo ele abriria o JMStudio e ENTÃO executava o arquivo. Só que ele simplesmente executa o arquivo e pronto, não fornecendo ao usuário nenhum controle sobre a execução do audio(pausa, andamento do arquivo, etc). Vi então que eu mesmo teria que criar um formulário com esses controles, só que não estou conseguindo que a apareça a barra de controle do JMF. Meu código está assim:

public class PlayerForm extends javax.swing.JFrame
{
     
    // reprodutor de mídia em Java
    private MediaPlayer player = null;
    
    // componente para conteúdo visual
    private Component visualMedia;
    
    // componentes de controle para a mídia
    private Component mediaControl;
  
    public PlayerForm()
    {
        initComponents();
        this.setResizable(false); // Desabilita botão maximizar
    }
    
    public void executaPlayer()
    {
        player  = new MediaPlayer();
        // Abre o arquivo local
        player.setMediaLocation("file:busca_gravacao.wav");
        
        try
        {
            visualMedia = player.getVisualComponent();
            mediaControl = player.getControlPanelComponent();

            if (visualMedia != null)
            {
                jPanelControl.add(visualMedia, java.awt.BorderLayout.CENTER);
            }
            if (mediaControl != null)
            {
                jPanelControl.add(mediaControl, java.awt.BorderLayout.CENTER);
            }
            
            jPanel.revalidate();                     
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        player.setPlaybackLoop(false);      
        player.start();
    }
 .....................................

Está sendo lançada essa exception:

Alguém poderia me dar uma força? Valeu!!!

7 Respostas

lina

Oi,
eu não sei qual o problema…
mas eu tenho um código aqui que implementei também… e esta funcionando…
poderia postar pra ajudar, se achar interessante…

Tchauzin!

B

Oi,
eu não sei qual o problema…
mas eu tenho um código aqui que implementei também… e esta funcionando…
poderia postar pra ajudar, se achar interessante…

Claro Lina, qualquer ajuda será bem vinda!

Valeu!!!

lina

Então tá..

segue:

public 
class			StoodMediaPlayer
	extends		JFrame
{
	//
	// Declara as variaveis necessarias.
	//
	private			Player
	player;
	
	private			File
	file;
	
	public			JDesktopPane 	
	desktop;
	
	/**	 
	 * Construtor da classe.
	 */
	public			StoodMediaPlayer()
	{
		//
		// Define o titulo para o StoodMedia
		//
		super("StoodMediaPLayer");
		
		//
		// Cria o botão para abrir a musica.
		//
		JButton 
		openFile		=	new JButton("Open file to play");
		
		//
		// Cria o listener para fazer a ação do botão.
		//
		openFile.addActionListener	(
							new ActionListener()
							{
								public
								void			actionPerformed(ActionEvent e)
								{
									openFile();
									createPlayer();
								}
							}
						);
		
		//
		// Define onde o botão ira ficar.
		//
		getContentPane().add(openFile, BorderLayout.NORTH);
		
		//
		// Carrega a imagem.
		//
		desktop			=	new JDesktopPane()
		{	
			Image 
			im		= 	(
							new ImageIcon("S:\\Lina\\media.jpg")
						).getImage();			
			
			public 
			void		paintComponent(Graphics g)
			{        
				g.drawImage(im,0,0,this);				
			}
		};
		
		//
		//Adiciona a imagem
		//
		getContentPane().add(desktop);
		
		//
		// Define o tamanho.
		//
		setSize(300,300);
		
		//
		// Abre a janela.
		//
		show();		
	}
	
	private
	void			openFile()
	{
		//
		// Abre a caxa de dialogos, para buscar a musica escolhida.
		//
		JFileChooser
		fileChosser		=	new JFileChooser();
		
		fileChosser.setFileSelectionMode	(
								JFileChooser.FILES_ONLY
							);
		
		int
		result		=	fileChosser.showOpenDialog(this);
		
		//
		// O Usuario clicou no botão cancelar no dialog. 
		//
		if	(				
				result			==	JFileChooser.CANCEL_OPTION
			)
		{				
			file			=	null;
		}
		else
		{
			file			=	fileChosser.getSelectedFile();
		}
	}
	
	private
	void			createPlayer()
	{
		if	(
				file			==	null
			)
		{
			return;
		}
		
		removePreviousPlayer();
		
		try
		{
			//
			// Cria um novo player e adiciona um ouvinte.
			//
			player			=	Manager.createPlayer(file.toURL());
			player.addControllerListener((ControllerListener) new EventHandler());
			player.start();
		}
		catch (Exception e) 
		{
			
		}
	}
	
	private
	void			removePreviousPlayer()
	{
		if	(
				player		==	null
			)		
		
		return;
		
		player.close();
		
		Component
		visual			=	player.getVisualComponent();
		
		Component
		control			=	player.getControlPanelComponent();
		
		Container
		c			=	getContentPane();
		
		if	(
				visual			!=	null
			)
		{
			c.remove(visual);
		}
		if	(
				control			!=	null
			)
		{
			c.remove(control);
		}
			
			
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		StoodMediaPlayer
		app			=	new StoodMediaPlayer();
		
		//
		// Se clicado no x, fecha a janela.
		//
		app.addWindowListener
		(
			new WindowAdapter()
			{				
				public void windowClosing(WindowEvent e)
				{
					System.exit(0);
				}
			}
		);
	}
	
	private
	class			EventHandler
		implements	ControllerListener
	{

		public void controllerUpdate(ControllerEvent e)
		{
			if	(
					e instanceof RealizeCompleteEvent
				)
			{
				Container
				c			=	getContentPane();
				
				Component
				visualComponent		=	player.getVisualComponent();
				
				if	(
						visualComponent	!=	null
					)
				{
					c.add(visualComponent, BorderLayout.CENTER);
				}
				
				Component	
				controlsComponent		=	player.getControlPanelComponent();
				
				if	(
						controlsComponent		!=	null
					)
				{
					c.add(controlsComponent, BorderLayout.SOUTH);					
				}
				
				c.doLayout();
			}
		}		
	}
}

Tchauzin!

lina

Nossa,
não gostei do [Code] novo do GUJ.

OBS: Eu vi um catch sem stack ali… não é uma boa pratica de programação heheheh

Tchauzin!

RaulCarlin
catch (Exception e)   
         {  
               
         }

Realmente…

Uma pergunta, no Java 6 essa API foi exterminada certo?

lina

Oi,
não sei… foi?

Tchauzin!

B

Obrigado Lina, funfou legal!!!

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:
TÓPICO RESOLVIDO
:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

Criado 5 de setembro de 2007
Ultima resposta 5 de set. de 2007
Respostas 7
Participantes 3