Pessoal,
Gostaria mais uma vez contar com o apoio de todos. Estou tentando fazer um player usando JMF(Java Media Framework), no entanto estou enfrentando algumas dificuldades, como por exemplo, ao tentar abrir um outro vídeo (NO MENU FILE --> ABRIR), o player simplesmente deixa ambos os vídos carregados no controller… e não estou achando uma solução de encerrar o outro e exibir somente o segundo vídeo passado para a URL…
Não estou conseguindo entender o que estou fazendo de errado…
Sou novato ainda em Java e precisa de uma força… quem puder ajudar…
Segue o código Fonte:
//Classe PlayerSM. Cria o frame e carrega o painel...
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class PlayerSM {
public static void main(String args[]){
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
URL mediaURL = null;
try{
mediaURL = fileChooser.getSelectedFile().toURL();
}catch(MalformedURLException malformedURLException){
JOptionPane.showMessageDialog(null, "Houve um erro para abrir o arquivo!");
System.err.println("Houve um erro para abrir o arquivo!\nErro: malformedURLException");
}
if(mediaURL != null){
JFrame frameSMPlayer = new JFrame("SM Player");
frameSMPlayer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
PlayerPanel playerPanel = new PlayerPanel(mediaURL);
frameSMPlayer.add(playerPanel);
frameSMPlayer.setSize(400,300);
frameSMPlayer.setResizable(true);
frameSMPlayer.setVisible(true);
}
}else{
JOptionPane.showMessageDialog(null, "Nenhum Arquivo Selecionado. Sistema será encerrado...");
System.exit(0);
}
}
}
Classe PlayerPanel: Carrega os Objetos e o Player em si.
[code]import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.media.*;
public class PlayerPanel extends JPanel{
private JMenuBar menuBar = new JMenuBar();
private JMenu fileMenu = new JMenu("Menu");
private JMenuItem subMenuAbrirMidia = new JMenuItem("Abrir...");
private Player mediaPlayer;
private Component video;
private Component controls;
public PlayerPanel (URL mediaURL){
this.setLayout(new BorderLayout());
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true);
System.out.println(mediaURL);
try{
mediaPlayer = Manager.createRealizedPlayer(mediaURL);
video = mediaPlayer.getVisualComponent();
controls = mediaPlayer.getControlPanelComponent();
subMenuAbrirMidia.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(e.getSource() == subMenuAbrirMidia){
mediaPlayer.stop();
mediaPlayer.setMediaTime(new Time(0));
mediaPlayer.deallocate();
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
URL mediaURL = null;
try{
mediaURL = fileChooser.getSelectedFile().toURL();
}catch(MalformedURLException malformedURLException){
JOptionPane.showMessageDialog(null, "Houve um erro para abrir o arquivo!");
System.err.println("Houve um erro para abrir o arquivo!\nErro: malformedURLException");
}
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true);
try{
mediaPlayer = Manager.createRealizedPlayer(mediaURL);
video = mediaPlayer.getVisualComponent();
controls = mediaPlayer.getControlPanelComponent();
mediaPlayer.start();
}catch(NoPlayerException noPlayerException){
System.err.println(noPlayerException);
}catch(CannotRealizeException cannotRealizeException){
System.err.println(cannotRealizeException);
}catch(IOException iOException){
System.err.println(iOException);
}
}
}
}
});
fileMenu.add(subMenuAbrirMidia);
menuBar.add(fileMenu);
this.add(menuBar, BorderLayout.NORTH);
if(video!=null)this.add(video, BorderLayout.CENTER);
if(controls!=null) this.add(controls, BorderLayout.SOUTH);
mediaPlayer.start();
}catch(NoPlayerException noPlayerException){
System.err.println(noPlayerException);
}catch(CannotRealizeException cannotRealizeException){
System.err.println(cannotRealizeException);
}catch(IOException iOException){
System.err.println(iOException);
}
}
}
[/code]
Se alguem conseguir me ajudar ficaria grato…
Se alguém souber como posso usar o listener para zerar o controller e exibir o novo conteúdo NO MENU ABRIR…
Fico grato…