|
Applets Java
En esta p�gina:
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.
|
|