COP 2800 - Java Application (Using Media) Demo

 

MediaDemo.java

Download MediaDemo.java source file
Download Mona.gif image file
Download Empire.au sound file

/*
 * @(#)MediaDemo.java 1.2 12/0/2009
 */
package com.wpollock.mediademo;

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
/**
 * MediaDemo shows how to show images and play simple audio from
 * a standalone application (as opposed to an applet).  Applets
 * have many builtin media features; applications are harder.
 *
 * The Java Media Framework ("JMF") includes many classes for
 * media, including MIDI, recording and editing sound, mixing, etc.
 * Here we use the simple AudioClip class (as of 1.3 this can be used
 * in standalone applications too).
 *
 * @version 1.2
 * @author Wayne Pollock
 */

public class MediaDemo extends Frame
{
   private Toolkit tk = Toolkit.getDefaultToolkit();
   private Image pic;
   private AudioClip snd;
   private int picWidth = 250, picHeight = 400;  // defaults

/*
 * @throws Exception
 *    Exceptions in a top-level class should be caught and handled.
 *    They are ignored here for the sake of clarity in demo programs.
 * @param args  The command line arguments passed from the OS.
 */
   public static void main ( String [] args ) throws Exception
   {
      // Creating images in swing is 3 easy steps:
      //    URL url = getClass().getResource( "image.gif" );
      //    JLabel pic = new JLabel( new ImageIcon( url ) );
      //    getContentPane().add( pic );
      // But it is harder in AWT, so that is shown below:

      MediaDemo frame = new MediaDemo();

      // Window closing event handler:
      frame.addWindowListener( new WindowAdapter()
        {  public void windowClosing ( WindowEvent we )
           {  System.exit( 0 );
           }
        }
      );

      frame.centerWin();
      frame.setBackground( Color.cyan );
      frame.add ( new Panel().add( new Label( "Mona Lisa", Label.CENTER ) ), "South" );
      frame.setVisible( true );

   }

   public MediaDemo ()
   {
      setTitle( "AWT Media Demo" );

      // Media are loaded from URLs, which are constructed
      // relative to the location of this class file:

      URL sndUrl = getClass().getResource( "Empire.au" );
      snd = Applet.newAudioClip( sndUrl );

      URL picUrl = getClass().getResource( "Mona.gif" );
      pic = tk.getImage( picUrl );
      MediaTracker mt = new MediaTracker( this );
      mt.addImage( pic, 0 );
      try { mt.waitForAll(); }
      catch ( InterruptedException ie ) {}
      if ( mt.isErrorAny() )
         pic = null;
      else
      {
         // Image is fully loaded when we get to here.
         picWidth = pic.getWidth( this );
         picHeight = pic.getHeight( this );
      }
      Insets insets = getInsets();
      setSize( picWidth + insets.left + insets.right + 50,
               picHeight + insets.top + insets.bottom + 100 );
   }

   public void paint ( Graphics g )
   {
      snd.play();
      Insets insets = getInsets();

      // draw backgroud image:
      if ( pic == null )
      {  g.drawString( "Error loading Image!", insets.left + 10, insets.top + 25 );
      } else
      {
         g.setColor( Color.red );
         g.fillRect( insets.left + 10, insets.top + 10, picWidth+20, picHeight+20 );
         g.drawImage( pic, insets.left + 20, insets.top + 20, this );
      }

      super.paint( g );  // Now draw components (on top of image).
   }


   /** This method centers a Frame on the screen.
    */
   private void centerWin ()
   {
      // Center the Frame on the screen:
      int screenWidth = tk.getScreenSize().width;
      int screenHeight = tk.getScreenSize().height;
      int frameWidth = getSize().width;
      int frameHeight = getSize().height;

      setLocation( ( screenWidth - frameWidth ) / 2,
                   ( screenHeight - frameHeight ) / 2 );
   }
}

 

MediaDemo.mf

Download MediaDemo.mf manifest file


Main-Class: com.wpollock.mediademo.MediaDemo

 

Commands to build the jar file

Download runnable (clickable) jar file

C:\Temp>mkdir com\wpollock\mediademo
C:\Temp>notepad com\wpollock\mediademo\MediaDemo.java
C:\Temp>notepad MediaDemo.mf
C:\Temp>javac com\wpollock\mediademo\MediaDemo.java
C:\Temp>copy Mona.gif com\wpollock\mediademo
C:\Temp>copy Empire.au com\wpollock\mediademo
C:\Temp>jar -cvfe MediaDemo.jar com.wpollock.mediademo.MediaDemo com

   OR you can do this: jar -cvfm MediaDemo.jar MediaDemo.mf com

added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/wpollock/(in = 0) (out= 0)(stored 0%)
adding: com/wpollock/mediademo/(in = 0) (out= 0)(stored 0%)
adding: com/wpollock/mediademo/Empire.au(in = 310062) (out= 280711)(deflated 9%)
adding: com/wpollock/mediademo/Mona.gif(in = 72909) (out= 72435)(deflated 0%)
adding: com/wpollock/mediademo/MediaDemo$1.class(in = 406) (out= 294)(deflated 27%)
adding: com/wpollock/mediademo/MediaDemo.class(in = 3106) (out= 1752)(deflated 43%)

C:\Temp>jar -i MediaDemo.jar     this step is not necessary!

C:\Temp>jar -tvf MediaDemo.jar
    78 Mon Jul 22 23:08:22 EDT 2002 META-INF/INDEX.LIST
     0 Mon Jul 22 23:08:12 EDT 2002 META-INF/
   119 Mon Jul 22 23:08:12 EDT 2002 META-INF/MANIFEST.MF
     0 Fri Aug 03 14:48:24 EDT 2001 com/
     0 Fri Aug 03 15:09:12 EDT 2001 com/wpollock/
     0 Mon Jul 22 23:01:08 EDT 2002 com/wpollock/mediademo/
310062 Mon Apr 02 19:05:40 EDT 2001 com/wpollock/mediademo/Empire.au
 72909 Tue May 26 23:17:20 EDT 1998 com/wpollock/mediademo/Mona.gif
   406 Mon Jul 22 23:04:06 EDT 2002 com/wpollock/mediademo/MediaDemo$1.class
  3115 Mon Jul 22 23:04:06 EDT 2002 com/wpollock/mediademo/MediaDemo.class

C:\Temp>java -jar MediaDemo.jar

C:\Temp>  (You could also double-click MediaDemo.jar, from the GUI)