Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Select a media file from tjelocal file system and gain statistics

/********************************************************************** * GUIMediaStatistics - a GUI allowing the user to select a media * file from tjelocal file system and gain statistics on that media * (audio or video) concerning its tracks and their format/composition. * * The class is built atop the MediaStatistics class and arguably * provides a more user friendly mechanism for determining the *format of media. * * @author Spike Barlow ***********************************************************************/ import java.awt.*; import java.awt.event.*; import javax.media.*; import java.util.*; public class GUIMediaStatistics extends Frame implements ActionListener {   /** Object to determine the format ofthe media. Performs all the real work. */   protected MediaStatistics     stats;   /** User wants to search for a file. */   protected Button              browseButton;   /** User wants to know the format of the current file. */   protected Button              getStatsButton;   /** Current state of processing. */   protected int                 state;   /** Where the format informationis displayed. */   protected TextArea            results;   /** Area i which the user can type the name of a file. */   protected TextField           mediaField;   /** Pause in milliseconds between checks to see if format is known. */   public static final int       PAUSE = 50;   /** Maximum wait before giving up on determining theformat. */   public static final int       MAX_WAIT_PERIOD = 10000;   /** Directory that the user last searched for files. */   protected String              lastDirectory; /********************************************************************** * Construct the GUIMediaStatistics object, constructing the various * components and laying them out on the screen. **********************************************************************/ public GUIMediaStatistics() {   super("GUIMediaStatistics");   setLayout(new BorderLayout());   addWindowListener(new WindowAdapter() {     public void windowClosing(WindowEvent e) {       System.exit(0); } });   Panel filePanel = new Panel();   filePanel.add(new Label("File:"));   mediaField = new TextField(40);   filePanel.add(mediaField);   browseButton =new Button("browse...");   filePanel.add(browseButton);   browseButton.addActionListener(this);   getStatsButton = new Button("get stats...");   filePanel.add(getStatsButton);   getStatsButton.addActionListener(this);   add(filePanel,"North");   results = new TextArea(80,10);   results.setEditable(false);   add(results,"Center"); } /************************************************************************ * Respond to user button presses - either browsing for a file or * gathering format info on the current file. ************************************************************************/ public void actionPerformed(ActionEvent e) {     /////////////////////////////////     // Browse - use FileDialog class.     /////////////////////////////////     if (e.getSource() == browseButton) {       FileDialog choice = new FileDialog(this, "Media File Choice",           FileDialog.LOAD);       if (lastDirectory != null)         choice.setDirectory(lastDirectory);       choice.show();       String selection = choice.getFile();       if (selection != null) {         lastDirectory = choice.getDirectory();         mediaField.setText("file://" + choice.getDirectory()             + selection);       }     }     ////////////////////////////////////////////////////////     // Get statistics - create a MediaStatistics object and     // monitor its progress.     ///////////////////////////////////////////////////////     else {       stats = new MediaStatistics(mediaField.getText());       monitorAndReport();     }   }   /************************************************************************    * Monitor the progress of the MediaStatistics object as it attempts to    * determineformatinformation for the current file. It periodically    * polls the object, obtaining a report from it and printing it to the    * screen. The polling stops as soon as the format is known, it is    * found that it isimpossible to determine a format, or a certain time    * period is exceeded.    **************************************************************************/   private void monitorAndReport() {     int elapsed = 0;     state = stats.getState();     while (elapsed < MAX_WAIT_PERIOD         && (state != MediaStatistics.FAILED && state != MediaStatistics.KNOWN)) {       results.setText(stats.getReport());       try {         Thread.sleep(PAUSE);       } catch (Exception e) {       }       elapsed += PAUSE;       state = stats.getState();     }     if (state == MediaStatistics.FAILED || state == MediaStatistics.KNOWN)       results.setText(stats.getReport());     else       results.setText("Timing out after maximum period of "           + MAX_WAIT_PERIOD + "ms");   }   /***************************************************************************    * Main method - construct a GUIMediaStatistics frame and show it on the    * screen.    **************************************************************************/   public static void main(String[] args) {     GUIMediaStatistics gui = new GUIMediaStatistics();     gui.pack();     gui.setSize(600, 400);     gui.show();   } }