GUIMediaStatistics.java Source code

Java tutorial

Introduction

Here is the source code for GUIMediaStatistics.java

Source

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