8. Les Applets Java

Introduction

Une applet Java est un programme qui est exécuté dans un browser tel que Netscape Navigator, ou HotJava de Sun. Une applet est intégrée dans une page au format HTML et est automatiquement téléchargée sur le poste client. Elle est ensuite exécutée par celui-ci.

Le téléchargement transparent et l'exécution automatique posent des problèmes de sécurité, et c'est pour cela que les applets Java sont limitées dans certains domaines. Typiquement, une applet ne peut pas gérer de fichiers, ni ouvrir des connections réseau arbitraires.

Intégration de l'applet dans une page Web

Il existe des balises (tags) HTML spécifiques pour indiquer au browser qu'une applet est présente dans une page. Il s'agit de <APPLET>. Voici un exemple classique :
<HTML>
<HEAD>
<TITLE>Exemple de page avec une applet</TITLE>
</HEAD>
<BODY>
<H1>Exemple d'applet</H1>
<applet code="appletExemple.class" width=100 height=50>
Votre browser ne supporte pas les applets !
</applet>
</BODY>
</HTML>

Mise en oeuvre

Tout programme Java est une classe. Une applet n'échappe pas à cette règle. Si l'on veut créer une applet, on doit étendre la classe java.applet.Applet. Cette classe contient les méthodes nécessaires à la gestion de l'applet, et à l'interaction de celle-ci avec son environnement (browser).

Voyons les méthodes les plus importantes, que votre applet devra remplacer si nécessaire :

public void init()
Le browser fait appel à cette méthode lorsque l'applet est chargée (ou rechargée). Cette méthode devra charger les informations telles que images ou sons, et récupérer les paramètres présents dans la page HTML.
public void start()
Après avoir été initialisée, l'applet est démarrée, grâce à la méthode start(). L'applet est également redémarrée après avoir été stoppée, lorsqu'elle est à nouveau visible.
public void stop()
Cette méthode permet à l'applet de s'arrêter lorsqu'elle n'est plus visible, parce que l'utilisateur a changé de page, par exemple.
public void destroy()
L'applet est détruite lorsque le browser s'arrête, ou avant que l'applet soit rechargée. Cette méthode doit être remplacée s'il on veut stopper des threads créés par start() de l'applet.
public void paint(Graphics g)
Cette méthode est appelée chaque fois que l'on doit redessiner l'applet. Le paramètre est de type Graphics et c'est la surface de dessin sur laquelle on doit travailler.

Exemple

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

public class applet1 extends Applet {

    Font font;

    public void init() {
        font = new Font("TimesRoman",Font.PLAIN,20);
    }

    public void paint(Graphics g) {
        g.setFont(font);
        g.setColor(Color.red);
        g.drawString("Je suis une applet !",0,font.getSize());
    }

}

Votre browser ne supporte pas les applets Java !En utilisant Netscape Navigator ou Sun HotJava, vous pourriez voir cette applet en cours d'exécution :

Cette applet n'implémente pas la méthode start(), car aucune tâche n'est effectuée en permanence. La seule chose que l'applet fait est de se redessiner lorsque le browser le redemande (paint(Graphics g)).

Que se passe-t-il si l'on veut que l'applet ait une activité permanente ? Toutes les applets s'exécutant dans browser utilisent la même machine virtuelle Java. On ne peut donc pas créer une boucle dans la méthode start() pour effectuer une tâche, parce que l'on occuperait la MV (machine virtuelle). Il faut donc créer un thread afin d'autoriser l'exécution parallèle des multiples applets.

Exemple

import java.awt.*;

public class applet2 extends java.applet.Applet implements Runnable {

    Thread tache;
    String lbl;
    Font font;
    boolean gris = false;
    
    public void init() {
        font = new java.awt.Font("TimesRoman", Font.PLAIN, 24);
        lbl = getParameter("lbl");
    }
    
    public void paint(Graphics g) {
        g.setFont(font);
        if (gris)
            g.setColor(Color.lightGray);
        else
            g.setColor(Color.black);
        g.drawString(lbl, 0, font.getSize());
    }
    
    public void start() {
        tache = new Thread(this);
        tache.start();
    }
    
    public void stop() {
        tache.stop();
    }
    
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);    // pause de 1 seconde
            } catch (InterruptedException e) {}
            gris = !gris;
            repaint();    // on force le réaffichage
        }
    }

}

Votre browser ne supporte pas les applets Java !En utilisant Netscape Navigator ou Sun HotJava, vous pourriez voir cette applet en cours d'exécution :

La page suivante vous expliquera le fonctionnement des événements.


Index général - Index concepts - Règles BNF
© 1996, DIP Genève, Alexandre Maret & Jacques Guyot
page générée Fri Jun 21 15:41:23 MET DST 1996