JMF - dúvida

Olá amigos!

Alguem poderia me dar uma ajudinha com isso aqui?
O problema está em doStart () e doStop ()

Estou tentando, após a alteração de
player.setStopTime (new Time(4.0)); // em doStart
e
player.setMidiaTime (new Time(1.0)); // em doStop

fazer com que o audio passe a ser executado nestes novos pontos.
Só que isso não está ocorrendo e eu não consigo ver onde estou errando.
O som antes de um novo start toca normalmente, mas não sai nestes novos pontos.

Agradeço antecipadamente qualquer ajuda.

Fonte:


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.net.*;

import javax.media.*;

import javax.media.protocol.DataSource;

import javax.media.format.FormatChangeEvent;



class GUIPlayerB extends JFrame implements ActionListener, ControllerListener

{

    

    // conteudo principal

    Component visualComponent = null;

    Component controlComponent = null;

    Player player = null;

    

    

    // abre o arquivo de midia, adiciona os ControllerListener

    private void doOpen ()

    {

	doReset ();

	try

	{

	    player = Manager.createPlayer ( new URL ( "file:test.mpg") );

	}

	catch (Exception ex)

	{

	    System.err.println ("Handler " + ex);

	}

	player.addControllerListener (this);

	player.realize ();

    }

    

    // realizeCompleteEvent. Adiciona os controlers

    void realizeCompleteEvent ()

    {

	controlComponent = player.getControlPanelComponent ();

	if (controlComponent != null)

	{

	    getContentPane ().add (BorderLayout.SOUTH, controlComponent);

	}

	pack ();

	player.prefetch ();	

    }

    

    // Remove os Components e desaloca midia. 

    private void doReset ()

    {

	if (controlComponent != null)

	{

	    getContentPane ().remove (controlComponent);

	}

	if (player != null)

	{

	    player.stop ();

	    player.deallocate ();

	}

	pack ();

    }

    

    

    private void doStart ()

    {

	if (player != null)

	{

	    player.setStopTime (new Time(4.0));

	    player.start ();

	}

    }

    

    private void doStop ()

    {

	if (player != null)

	{

	    player.stop ();

	    player.setMediaTime (new Time(1.0)); 

	}

    }

    

    // sai do programa

    private void exiting ()

    {

	player.stop ();

	player.deallocate ();

	System.exit (0);

    }

    

    



    

    

    

    // Controle de eventos da mídia

    public void controllerUpdate (ControllerEvent e)

    {

	//System.out.println (e);

	//System.out.println ( ""+ mediaPlayer1.getMediaNanoseconds()  );

	

	if (e instanceof ControllerEvent)

	{

	    System.out.println ( "ControllerEvent:" ) ;

	    

	    

	    

	    if( e instanceof StopTimeChangeEvent )

	    {

		System.out.println ( "-StopTimeChangeEvent" ) ;

	    }

	    if( e instanceof RateChangeEvent )

	    {

		System.out.println ( "-RateChangeEvent" ) ;

	    }

	    if( e instanceof MediaTimeSetEvent )

	    {

		System.out.println ( "-MediaTimeSetEvent" ) ;

	    }

	    if( e instanceof DurationUpdateEvent )

	    {

		System.out.println ( "-DurationUpdateEvent" ) ;

	    }

	    if( e instanceof ControllerClosedEvent )

	    {

		System.out.println ( "-ControllerClosedEvent" ) ;

	    }

	    if( e instanceof AudioDeviceUnavailableEvent )

	    {

		System.out.println ( "-AudioDeviceUnavailableEvent" ) ;

	    }

	    

	    

	    if( e instanceof FormatChangeEvent )

	    {

		System.out.println ( "-FormatChangeEvent" ) ;

		if( e instanceof SizeChangeEvent )

		{

		    System.out.println ( "--SizeChangeEvent" ) ;

		}

	    }

	    

	    

	    if( e instanceof CachingControlEvent )

	    {

		System.out.println ( "-CachingControlEvent" ) ;

		

		

		if( e instanceof DataLostErrorEvent )

		{

		    System.out.println ( "--DataLostErrorEvent" ) ;

		}

		

		

		if( e instanceof ControllerErrorEvent )

		{

		    System.out.println ( "--ControllerErrorEvent" ) ;

		    

		    if( e instanceof ConnectionErrorEvent )

		    {

			System.out.println ( "---ConnectionErrorEvent" ) ;

		    }

		    if( e instanceof InternalErrorEvent )

		    {

			System.out.println ( "---InternalErrorEvent" ) ;

		    }

		    if( e instanceof ResourceUnavailableEvent )

		    {

			System.out.println ( "---ResourceUnavailableEvent" ) ;

		    }

		}

	    }

	    

	    

	    // indica que o Controller mudou de estado

	    if( e instanceof TransitionEvent )

	    {

		System.out.println ("-TransitionEvent:");

		

		if( e instanceof ConfigureCompleteEvent )

		{

		    System.out.println ("--ConfigureCompleteEvent");

		}

		if (e instanceof PrefetchCompleteEvent)

		{

		    System.out.println ("--PrefetchCompleteEvent");

		}

		if (e instanceof RealizeCompleteEvent)

		{

		    //*******************************************

		    realizeCompleteEvent ();

		    System.out.println ("--RealizeCompleteEvent");

		}

		if (e instanceof StartEvent)

		{

		    System.out.println ("--StartEvent");

		}

		

		if (e instanceof StopEvent )

		{

		    System.out.println ("--StopEvent");

		    

		    if (e instanceof DataStarvedEvent)

		    {

			System.out.println ("---DataStarvedEvent");

		    }

		    if (e instanceof DeallocateEvent)

		    {

			System.out.println ("---DeallocateEvent");

		    }

		    if (e instanceof EndOfMediaEvent)

		    {

			//**************************************

			doStop () ;

			System.out.println ("---EndOfMediaEvent");

		    }

		    if (e instanceof RestartingEvent)

		    {

			System.out.println ("---RestartingEvent");

		    }

		    if (e instanceof StopAtTimeEvent)

		    {

			System.out.println ("---StopAtTimeEvent");

		    }

		    if (e instanceof StopByRequestEvent)

		    {

			System.out.println ("---StopByRequestEvent");

		    }

		}

	    }

	}

	System.out.println ( "----------------" ) ;

    }

    

    

    

    

    

    //**********************************************

    // todos abaixo sao sem importancia no momento   

    //**********************************************

    

    

    private void makeMenuBar ()

    {

	JMenuBar mb = new JMenuBar ();

	JMenuItem openItem = new JMenuItem ("Open");

	openItem.addActionListener (this);

	mb.add (openItem);

	JMenuItem resetItem = new JMenuItem ("Reset");

	resetItem.addActionListener (this);

	mb.add (resetItem);

	JMenuItem exitItem = new JMenuItem ("Exit");

	exitItem.addActionListener (this);

	mb.add (exitItem);

	setJMenuBar (mb);

    }

    

    // eventos dos menus

    public void actionPerformed (ActionEvent e)

    {

	String cmd = e.getActionCommand ();

	if (cmd.equals ("Open"))

	{

	    doOpen ();

	}

	else if (cmd.equals ("Reset"))

	{

	    doReset ();

	}

	else if (cmd.equals ("Exit"))

	{

	    exiting ();

	}

    }

    

    GUIPlayerB ()

    {

	setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

	makeMenuBar ();

	doReset ();

	pack ();

    }

    

    public static void main (String[] args)

    {

	GUIPlayerB gp  = new GUIPlayerB ();

	gp.setVisible (true);

    }

}