 |
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.
|
 |