Dans cette fiche... |
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. |
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...
// -------------------------------------------------- // 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); } }
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). |
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.