Archive for Septiembre 2008
Ejercicio 4!
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!
Add comment Septiembre 8, 2008