Dans cette fiche...

<Retour>

Description de l'applet

Difficulté : Résultat
Une autre façon d'utiliser le MediaTracker pour afficher les images une fois qu'elles sont complètement chargées, et non par morceaux.

Pour plus de détails, reportez-vous à la fiche MediaTracker.

Votre navigateur n'est pas compatible Java !

Principe

Comme dans la fiche précédente, on utilise le MediaTracker pour suivre le chargement des images avant de les afficher.

Cette deuxième variante est un peu moins élégante (surtout si les images sont grandes ou nombreuses) : elle consiste à attendre le chargement des images dans la méthode init() de l'applet, donc avant tout affichage. Résultat : aucun message n'est affiché dans l'applet pour faire patienter l'utilisateur.

Avantage de la méthode : elle est moins confuse, puisque les instructions se suivent en séquence : on prépare le chargement des images, on attend la fin du chargement et on peut enchaîner sur la suite logique du programme...

Listing de l'applet

// --------------------------------------------------
// CHARGEIMAGE
// Utilisation du MediaTracker pour le chargement 
// d'images en Java
// --------------------------------------------------
import java.applet.*;
import java.awt.*;
public class ChargeImage extends Applet
{
	// Buffer pour l'image de fond
	Image fond;
	// Buffer pour l'image principale
	Image im;
	// MediaTracker, pour suivre le chargement des images
	MediaTracker mt=null;	
	// --------------------------------------------------
	// INITIALISATION DE L'APPLET
	// --------------------------------------------------
	public void init()
	{
		// Couleur de fond de l'applet en blanc
		setBackground(Color.white);
		// Chargement de l'image de fond
		fond = getImage(getCodeBase(), "bkgGrisRelief.gif");
		// Chargement de l'image principale
		im = getImage(getCodeBase(), "smiley.gif");
		// Initialiser le MediaTracker
		mt = new MediaTracker(this);
		// Démarrer le suivi du chargement d'images
		mt.addImage(im, 0);
		mt.addImage(fond, 0);	
		// Attendre que toutes les images soient chargées
		try
		{
			mt.waitForAll();
		} catch(Exception e) {}
	}
	// --------------------------------------------------
	// AFFICHAGE
	// --------------------------------------------------
	public void paint(Graphics g)
	{
		// Dessin de l'image de fond
		// Le fond est dessiné 3 fois pour couvrir l'applet
		g.drawImage(fond, 0, 0, this);
		g.drawImage(fond, 100, 0, this);
		g.drawImage(fond, 200, 0, this);
		// On dessine l'image en x=0 et y=0
		g.drawImage(im, 0, 0, this);
		// Idem, en x=130 et y = 20
		g.drawImage(im, 130, 20, this);
	}
}

Le listing en détail...

Les lignes non commentées ont déjà été traitées dans les exemples précédents.

// Attendre que toutes les images soient chargées
try
{
	mt.waitForAll();
} catch(Exception e) {}
Une fois l'objet MediaTracker mt créé, et une fois que les images lui ont été affectées, on peut suivre le chargement des images. Dans cet exemple, on lance une sorte de boucle d'attente grâce à la méthode waitForAll() ( = attendre toutes les images).

L'exécution du programme n'ira pas plus loin tant que les images ne sont pas chargées (ou qu'une erreur de chargement s'est produite).

Pour que la méthode waitForAll() fonctionne, il faut englober la ligne dans un bloc Try/Catch (gestion d'exceptions dont nous parlerons dans une prochaine fiche).

Intégration de l'applet dans la page

Voici le code qui a été utilisé dans cette page HTML pour faire apparaître l'applet :

<applet code="ChargeImage.class" width=250 height=90>
Votre navigateur n'est pas compatible Java !
</applet>

Pour plus de précisions sur l'intégration d'une applet, cliquez ici.