Java tutorial
/********************************************************************** * 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(); } }