Applets Java


En esta p�gina:

  • Clase MediaTracker

Clase MediaTracker

Para poder controlar mejor el viaje que hacen por la red los archivos gr�ficos, deberemos recurrir a la clase MediaTracker. Esta clase nos permite saber cuando se han descargado los gr�ficos y si lo han hecho bien o con errores.

Primero crearemos un objeto:

MediaTracker tracker = new MediaTracker(this);

Este constructor toma como par�metro el componente donde se van a dibujar las im�genes. Puesto que un applet es un componente, utilizaremos this como par�metro. Dispondremos entonces de los siguientes m�todos:

void tracker.addImage( Image img,int id )
Este es el m�todo esencial, pues especifica que la imagen sea "espiada" con MediaTracker. Le asigna un n�mero de identificaci�n, que puede ser compartido por varias im�genes.
boolean tracker.checkAll()
boolean tracker.checkAll(boolean load)
Comprueba todas las im�genes, devolviendo false si a�n no se han descargado y true en caso contrario (incluso cuando se han descargado con fallos). Si a�n no ha comenzado la descarga de alguna imagen y ponemos load a true, comenzar� a descargarlas en ese mismo instante.
boolean tracker.checkID(int id)
boolean tracker.checkID(int id,boolean load)
Id�ntico al anterior, pero comprueba s�lo las im�genes cuyo identificador sea igual a id.
void tracker.waitForAll()
Obliga al hilo actual a esperar a que se carguen todas las im�genes.
void tracker.waitForID(int id)
Obliga al hilo actual a esperar a que se carguen todas las im�genes del grupo id.
boolean tracker.isErrorAny()
Indica si se ha producido alg�n error en la descarga de alguna imagen.
boolean tracker.isErrorID(int id)
Indica si se ha producido alg�n error en la descarga de alguna imagen.

Existen m�s, pero en general son otras formas de hacer lo mismo. Vamos a ver un ejemplo, una animaci�n gr�fica. Para ello cargaremos cada uno de los gr�ficos, esperaremos a que est�n disponibles, y finalmente los mostraremos:

MostrarAnimacion.java
/**
 * Applet MostrarAnimacion
 *
 * <APPLET CODE="MostrarAnimacion.class" WIDTH="56" HEIGHT="60">
 * </APPLET>
 */

import java.applet.Applet;
import java.awt.*;

public class MostrarAnimacion extends Applet implements Runnable {
  int imgActual = 0;
  Thread hilo = null;
  Image[] img;
  MediaTracker tracker;
  public void init() {
    tracker = new MediaTracker(this);
    img = new Image[18];
    for (int i=0; i<=17; i++) {
      img[i] = getImage(getDocumentBase(), "tierra" + (i+1) + ".gif");
      tracker.addImage(img[i], 0);
    }
  }
  public void start() {
    if (hilo==null) {
      hilo = new Thread(this);
      hilo.start();
    }
  }
  public void stop() {
    hilo = null;
  }
  public void paint(Graphics g) {
    if (checkAll())
      g.drawImage(img[imgActual],0,0,this);
    else {
      g.drawString("Cargando",10,10);
      g.drawString("gr�ficos",10,30);
    }
  }
  public void run() {
    try {
      repaint();
      tracker.waitForAll();
    }
    catch (InterruptedException e) {}
    while (hilo!=null && hilo.isAlive()) {
      imgActual++;
      if (imgActual >= img.length) imgActual = 0;
      repaint();
      try {
        hilo.sleep(50);
      }
      catch (InterruptedException e) {}
    }
  }
  public void update(Graphics g) {
    paint(g);         
  }
}

Creamos un hilo de ejecuci�n nuevo para que nuestra animaci�n sea fluida y suavecita. El m�todo run(), no obstante, lo primero que hace es esperar hasta que se carguen las animaciones; paint() mientras tanto escribir� el texto "Cargando gr�ficos". Una vez que se hayan terminado de cargar las im�genes, el hilo se encarga de mostrar un fotograma cada 50 milisegundos.