/* JMFMediaChooser där man ska kunna välja aktuell media fil och sen köra den i spelaren. */ import javax.swing.border.*; import java.util.*; import javax.media.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; public class JMFMediaChooser extends JFrame implements ControllerListener{ private JPanel panel, soder; private JMenuBar jmb = new JMenuBar(); private JMenu menu = null; private JMenuItem open = null; private JMenuItem close = null; private File fil = null; private Player spelare, nySpelare; private Component visualComponent = null; private Component controllerComponent = null; private Component progressBar = null; private JLabel text = new JLabel("Välj i menyn vilken fil som ska spelas!"); public JMFMediaChooser(){ super("JMFMediaChooser"); getContentPane().setLayout(new BorderLayout()); getContentPane().setBackground(Color.BLACK); panel = new JPanel(new BorderLayout()); soder = new JPanel(new BorderLayout()); open = new JMenuItem("Öppna fil"); close = new JMenuItem("Avsluta"); //meny menu = new JMenu("Arkiv"); menu.add(open); menu.add(close); jmb.add(menu); panel.add("North", jmb); text.setFont(new Font("Verdana", Font.ITALIC, 16)); soder.add("South", text); close.addActionListener(new MenyLyssnare()); open.addActionListener(new MenyLyssnare()); addWindowListener(new WindowAdapter () { public void windowClosing (WindowEvent e) { System.exit(0); } } ); getContentPane().add("North", panel); getContentPane().add("South", soder); setSize(400, 400); show(); }//konstruktor //hantera olika events public synchronized void controllerUpdate(ControllerEvent e){ if (e instanceof RealizeCompleteEvent) realizeComplete(); else if (e instanceof PrefetchCompleteEvent) prefetchComplete(); else if (e instanceof ControllerErrorEvent) controllerError(); else if (e instanceof ControllerClosedEvent) controllerClosed(); }//controllerUpdate public void realizeComplete(){ visualComponent = spelare.getVisualComponent(); controllerComponent = spelare.getControlPanelComponent(); //placera ut de skapade komponenterna if(visualComponent != null) getContentPane().add("Center", visualComponent); if(controllerComponent != null) getContentPane().add("South", controllerComponent); validate(); spelare.prefetch(); }//realizeComplete //Metoden tar emot en händelse och kontrollerar vart hanteringen ska delegeras vidare. public void prefetchComplete() { if(spelare.getTargetState() != Controller.Started) spelare.start(); }//prefetchComplete //felhantering där man plockar ned mediakomponenterna och städar undan. void controllerError(){ spelare.close(); if(visualComponent != null) remove(visualComponent); if(controllerComponent != null) remove(controllerComponent); visualComponent = null; controllerComponent = null; spelare.removeControllerListener(this); spelare = null; } //controllerError //hanterar ControllerClosedEvent, städar upp!! public void controllerClosed(){ if(visualComponent != null) remove(visualComponent); if(controllerComponent != null) remove(controllerComponent); spelare = null; System.gc(); System.runFinalization(); //ska det startas en ny? if(spelare != null){ spelare = null; spelare.addControllerListener(this); spelare.realize(); } validate(); }//controllerClosed //döda spelare public void stop() { if(spelare != null) spelare.close(); while(spelare != null){ try{ Thread.currentThread().sleep(500); }catch(Exception ex){} }//while }//stop //stänger applikationen public void close() { //ta bort objekt som saknar referenser System.gc(); System.runFinalization(); System.exit(0); } //öppnar en fildialog och man får välja fil som sedan spelas public void open() { JFileChooser chooser = new JFileChooser(); int returnVal = chooser.showOpenDialog(getContentPane()); if(returnVal == JFileChooser.APPROVE_OPTION){ //hämta fil fil = chooser.getSelectedFile(); System.out.println("You chose to open this file: " + chooser.getSelectedFile().getName()); if(fil != null){ nySpelare = createPlayer(fil.toString()); //plocka bort ev spelare boolean closingdown = false; //döda ev. tidigare spelare if(spelare != null){ closingdown = true; spelare.close(); } if(nySpelare == null) return; //starta ny spelare if(!closingdown){ spelare = nySpelare; spelare.addControllerListener(JMFMediaChooser.this); spelare.realize(); } } } }//open //skapa ny spelare med den valda fil public Player createPlayer(String filnamn){ Player nySpelare; try{ MediaLocator ml = new MediaLocator("file:"+filnamn); if(ml == null) return null; nySpelare = Manager.createPlayer(ml); }//try catch(Exception e){ return null; } return nySpelare; }//createPlayer class MenyLyssnare implements ActionListener{ public void actionPerformed (ActionEvent e) { String mCommand = e.getActionCommand(); if(mCommand.equals("open")) //öppna fil open(); if(mCommand.equals("close")) close(); }//actionPerformed }//MenyLyssnare public static void main(String args[]){ new JMFMediaChooser(); } }//huvudklass