Ejercicio 4!

Septiembre 8, 2008

El ejercicio 4 ha acabado con mi paciencia, no se cual es el fallo pero no consigo que funcione.  Voy a escribir mi solución comentada para que se vea la idea que yo tenía a la hora de resolver este ejercicio. Y si alguien encuentra el fallo y me puede ayudar se lo agradecería mucho ;)

Aqui os lo dejo:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.String;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.IOException;
import javax.media.*;
//Clase reproductor
public class Reproductor extends JFrame implements ActionListener, ControllerListener{
String archivo;
Player player=null;
URL url=null;
Component componenteVisual=null;
Component componenteControl=null;
Component barraProgreso=null;
int contador;
Timer timer;
int num=0;
static boolean parado;
static int duracion;
static int []array;
int a=0;

public Reproductor(String archivo){
parado=false;
contador=0;
this.archivo=archivo;
array=new int[2];//No se hacerlo con un array de longitud indeterminada, le tengo que dar un valor
timer=new Timer(1000, this);
getContentPane().setLayout(new BorderLayout());

try{

if((url=new URL(archivo))==null){
System.err.println(“No se puede crear Url para el archivo”);
}
else{
player=Manager.createPlayer(url);
player.addControllerListener(this);
}
}
catch(MalformedURLException e){
System.out.println(“Url no valida”);
}
catch(IOException e){
System.out.println(“Excepción de lectura/escritura”);
}
catch(NoPlayerException e){
System.out.println(“No existe reproductor”);
}

player.start();
timer.start();
addWindowListener(new EscuchadorVentana());
}

public void actionPerformed(ActionEvent e){
//Va contando los segundos de cada video
contador++;
}

public Player damePlayer(){
return player;
}

public synchronized void controllerUpdate(ControllerEvent e){

if(player==null){
return ;
}
if(e instanceof RealizeCompleteEvent){
if((componenteVisual=player.getVisualComponent())!=null){
this.getContentPane().add(“Center”, componenteVisual);
}

if((componenteControl=player.getControlPanelComponent())!=null){

this.getContentPane().add(“South”, componenteControl);
}
validate();
}

else if(e instanceof EndOfMediaEvent){
player.setMediaTime(new Time(0));

//Supuestamenete este evento captura cuando la reproducción termina, por eso paro el timer.
timer.stop();
/*Mi idea es almacenar los tiempos en un array, el que primero termine se almacenará en la posición 0 y así sucesivamente. Entonces luego solo tendré que reproducir es que se encuentre en la primera posición(el de menor duración).*/
array[a]=dameTiempo();

//El siguiente que termine se almacenará en la posición 1
a++;

//La variable parado nos indica cuando ha terminado una reproducción
parado=true;
}

else if(e instanceof ControllerErrorEvent){
player=null;
System.err.println(((ControllerErrorEvent)e).getMessage());
}
}

public int dameTiempo(){
return contador;
}

public class EscuchadorVentana extends WindowAdapter{
public void windowClosing(WindowEvent e){
if (player != null){
player.stop();
player.deallocate();
player.close();
}
System.exit(0);
}
}

public void temp(){
if((componenteVisual=player.getVisualComponent())!=null){
System.out.println(“Este archivo contiene video”);
}
else {
System.out.println(“Este archivo solo contiene audio”);
}
}

//Main
public static void main (String[]args){
Reproductor r;

//Lo que intento hacer es crear varios objetos a la vez para que se vayan reproduciendo simultaneamente
for (int i=0;i<args.length;i++){
r=new Reproductor(args[i]);

/* No podremos entrar en este if, hasta que la variable parado no esté a true, es decir, hasta que el
video haya terminado de reproducirse.*/

if(parado==true){
int durMin=r.dameTiempo();
System.out.println(“Título: “+args[i]+” Duracion: “+durMin);
r.temp();
}
parado=false;//Para que el siguiente video no entre en el if antes de tiempo

/*Comprobamos que el tiempo de este reproductor coincide con el de la primera posición y lo reproducimos
aunque los de mayor duración sigan reproduciendose sin visualización, cuando hayan terminado se mostrara su titulo, tipo de archivo etc…*/

if(r.dameTiempo()==array[0]){
r.setSize(500,500);
r.setVisible(true);
r.damePlayer().start();
}

}
}
}//fin clase

Por si no ha quedado muy claro, mi idea era que al introducir los titulos de las pistas, todas se empezaran a reproducir a la vez sin visualizar y sin sonido (el sonido he sido incapaz de quitarlo, asi que sonaban todas a la vez…), y en cuanto la más corta terminara volver a reproducirla visualizándola. Cuando fueran terminando las demás se daría su título, duración y resto de requisitos que nos pedían en el enunciado.

El caso es que si que se reproducen todas a la vez pero no llega a dar las características del video, cuando van terminando las reproducciones el programa se queda parado y no hace nada.

Espero que alguno de vosotros pueda ayudarme, que llevo muuuuchos días quebrándome la cabeza!!

Un saludo!

Entry Filed under: Uncategorized. .

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Calendar

Septiembre 2008
L M X J V S D
« Ago    
1234567
891011121314
15161718192021
22232425262728
2930  

Most Recent Posts