next up previous contents index
Next: 24 Découvrir la programmation Up: Java: Programmation graphique Previous: Java: Programmation graphique

Subsections

23 Applets et applications autonomes

23.1 Application autonome

Un programme Java est constitué d'une ou de plusieurs classes. Parmi toutes ces classes, il doit exister au moins une classe qui contient la méthode statique et publique main qui est le point d'entrée de l'exécution du programme. Comme d'habitude, commençant une tout petit exemple :
 
// Fichier Bonjour.java
public class Bonjour {
    public static void main(String args[]) {
        System.out.println("Bonjour !") ;
}
Cette classe définit une classe Bonjour qui ne possède qu'une seule méthode. La méthode main doit être déclarée static et public pour qu'elle puisse être invoquée par l'interpréteur Java . L'argument args est un tableau de String qui correspond aux arguments de la ligne de commande lors du lancement du programme.

Avant de pouvoir exécuter ce programme, il faut tout d'abord le compiler avec la commande javac.

 
javac Bonjour.java
La commande javac traduit le code source en code intermédiaire Java . Ce code est évidemment indépendant de la plate forme sur laquelle il a été compilé. Le compilateur Java produit alors autant de fichiers que classes qui ont été définies dans le fichier source. Les fichiers compilés ont l'extension .class.

Enfin, pour exécuter ce programme, il faut utiliser l'interpréteur de code Java et lui fournir le nom de la classe publique que l'on veut utiliser comme point de départ de notre programme.

 
java Bonjour

23.1.1 Les arguments de la ligne de commande

Les arguments de la ligne de commande permettent de passer des options, des valeurs etc. lors de l'exécution d'un programme. Les arguments de ligne de commandes sont passés à la méthode main dans un tableau de chaînes de caractères.

 
public static void main (String[] args)
A titre d'exemple, le programme suivant:
 
class Echo {
  public static void main (String[] args) {
    for (int i = 0; i < args.length; i++)
      System.out.println(args[i]);
  }
}
affiche tous les arguments de la ligne de commande
 
% java Echo Bonjour et Bonne Année
Bonjour
et
Bonne
Année
Dans les langages C et C++ , les arguments de la ligne de commande sont définis par

Quant aux applications Java , le système ne passe qu'un seul paramètre qui est un tableau de String. On connaît le nombre d'arguments en examinant le champ length du tableau.

Contrairement à C et C++ , Java n'inclut pas le nom de l'application dans les arguments.

 

class ParseCmdLine {
    public static void main(String[] args) {
        int i = 0, j;
        String arg;
        char flag;
        boolean vflag = false;
        String outputfile = "";
    
        while (i < args.length && args[i].startsWith("-")) {
            arg = args[i++];
      
            if (arg.equals("-verbose")) {
            System.out.println("mode verbose"); vflag = true;
            }
            else if (arg.equals("-output")) {
            if (i < args.length)
                outputfile = args[i++];
            else
                System.err.println("-output doit etre suivi d'un nom de fichier");
            if (vflag)
                System.out.println("output file = " + outputfile);
            }
            else {
                for (j = 1; j < arg.length(); j++) {
                flag = arg.charAt(j);
                switch (flag) {
                    case 'x':
                        if (vflag) System.out.println("Option x");
                        break;
                    case 'n':
                        if (vflag) System.out.println("Option n");
                        break;
                    default:
                        System.err.println("ParseCmdLine: option inconnue " + flag);
                        break;
                }
             }
          }
       }
       if (i == args.length)
           System.err.println("Usage: ParseCmdLine [-verbose] [-xn] [-output afile] filename");
       else
           System.out.println("Success!");
    }
}

23.1.2 Les System Properties

 

A TERMINER

23.2 Applets

Les applets ne sont pas des applications java . Cette affirmation a de quoi surprendre puisque vous avez déjà sûrement vu, en naviguant sur Internet , de très jolies exemples qui ``tournent''. Ce qui distingue une application autonome d'une applet , c'est :

Une applet qui est une sorte d'application graphique est un objet de la classe java.applet.Applet.

Du point du browser chargé d'exécuter du code Java une applet est tout simplement un type d'objet particulier à visualiser. Par exemple, les browsers sont, depuis bien longtemps, capable de reconnaître et d'interpréter un clip vidéo inséré dans une page HTML . Généralement ce n'est pas le browser qui est capable d'interpréter un clip vidéo . Par contre, il est capable de faire appel à un programme externe pour l'interpréter : ce sont les helper applications .

Cette technique peut évidemment s'utiliser pour exécuter du code Java . Il suffit de disposer d'un programme externe (fourni avec JDK ) capable d'exécuter les applets Java et configurer le browser pour qu'il fasse appel à ce programme. Un tel programme existe est c'est le fameux appletviewer .

Cette approche n'est pas la plus agréable du point de vue visuel. En effet, l'appletviewer , en tant programme autonome, ouvre sa propre fenêtre pour exécuter le code Java . C'est pourquoi, SUN avec HotJava , NetScape et MicroSoft avec Internet Explorer ont implanté dans leur browser leur propre appletviewer de manière à insérer les sorties (généralement graphiques) au sein même de leur browser .

23.3 Java et HTML

    Pour insérer une applet Java dans une page HTML, il faut : Une classe public (par exemple, Bonjour.class), point de départ de l'applet Un fichier HTML contenant la balise :
 
<applet
        code = Bonjour.class
        width = 200,
        height = 200>
</applet>
Il suffit alors d'utiliser l'appletviewer ou n'importe quel browser HTML qui reconnaît la balise applet pour visualiser cette page. Les balises applet indiquent qu'il faut exécuter du code Java lors de l'ouverture de la page. L'argument code de cette balise HTML précise la classe Java , point de départ de l'applet. Les arguments width et height définissent les dimensions en pixels du cadre réservé à l'applet dans la page HTML . Si vous essayez cet exemple, vous aurez une bien mauvaise surprise : la chaîne de caractères "Bonjour" s'affiche, non pas dans la page HTML, mais dans la console Java . C'est décevant !

Pourquoi les sorties ne s'affichent pas sur la page HTML ? Contrairement aux applications autonomes, une applet est d'emblée une application graphique. Par conséquent, les entrées/sorties standard s'effectue sur une console. Le comportement de note applet est tout à fait normal.

Comment faire pour afficher ces sorties sur la page HTML ? La partie de la page HTML réservée à l'applet Java doit être vue comme une fenêtre graphique. Il faut donc, non pas utiliser les entrées/sorties standard, mais plutôt dessiner du texte dans la partie de la page HTML réservée à l'applet.

Nous détaillerons, plus tard, les possibilités graphiques de Java . En attendant, contentons nous simplement du fait que la méthode paint est invoquée (redéfinition de la méthode paint de la classe de base de l'applet) chaque fois que l'applet passe à l'état ``visible''. Il appartient donc à l'applet de définir de qui doit être fait dans cette méthode.  

 
public void paint(Graphics g)
Sans rentrer dans les détails, signalons que l'objet g de la classe Graphics est celui rattaché à notre applet et c'est sur cet objet que les modifications graphiques seront effectuées. Parmi les multiples méthodes de la classe Graphics, la méthode
 
public void drawString(String s, int x, int y)
permet de dessiner le texte contenue dans la chaîne s à partir de la position donnée par les coordonnées (x, y) relativement au coin supérieur gauche de la zone réservée à l'applet dans la page. Nous avons, à présent, tout ce qu'il nous faut pour faire en sorte que l'applet écrive le texte "Bonjour" directement sur la page HTML .
 
/** Classe Bonjour qui se contente d'écrire la chaîne Bonjour
 */
public class Bonjour extends java.applet.Applet {
    /** La méthode paint est une redéfinition de la méthode paint de la classe Applet.
        Elle a pour rôle de dessiner la chaîne Bonjour chaque fois que nécessaire
    */
    public void paint(java.awt.Graphics g) {
        g.drawString("Bonjour", 100, 100) ;
    }
}
On associe un fichier HTML qui devrait permettre de visualiser l'applet :
 
<html>
    <head>
    <title>Bonjour</title>
    </head>
    <body>
        Vous devriez voir la chaîne de caractères "Bonjour" ci-dessous
        <applet
            code=Bonjour.class
            width=200,
            height=200>
        </applet>
    </body>
</html>
Ce petit exemple illustre bien des concepts que nous avons détaillés (langage Java ) ou que nous détaillerons plus tard (création des programmes Java avec environnement graphique : Abstract Windowing Toolkit - AWT ).

23.4 Cycle de vie d'une applet

               Une applet hérite beaucoup de propriétés des objets graphiques. En particulier, il se découpe en quatre parties :
Initialisation :
c'est la phase où l'appletviewer charge l'applet et lui demande d'effectuer les initialisations prévues dans le code Java .
Visible :
chaque fois que l'applet devient ou redevient visible à l'utilisateur, il est demandé à l'applet d'effectuer les opérations nécessaires pour se dessiner de nouveau.
Invisible :
chaque fois que l'applet devient ou redevient invisible à l'utilisateur, il est demander à l'applet d'effectuer les opérations nécessaires pour éventuellement libérer les ressources ou interrompre certaines de ces activités. Par exemple, si l'applet consiste une animation graphique, pendant qu'elle est invisible à l'utilisateur, l'animation peut être suspendue.
Arrêt définitif:
lorsque l'applet doit s'arrêter (changement de page HTML, par exemple), il est demander à l'applet de se terminer proprement.

A chacun de ses états correspond une méthode de la classe Applet.

 

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

public class Simple extends Applet {
  public void init() {         // Initialisation
    System.out.println("Initialisation"); 
  }
  public void start() {        // Visible
    System.out.println("Start"); 
  }   
  public void stop() {         // Invisible
    System.out.println("Stop"); 
  }     
  public void destroy() {      // Arret définitif
    System.out.println("destroy"); 
  } 
  public boolean mouseDown(Event event, int x, int y) {
    System.out.println("Mouse Down");
    return true;
  }
}

Essayer cet exemple et voyez les affichages produits sur la sortie standard pour voir les différents états par lesquels passe cet applet.

23.5 La balise APPLET

    Les applets, contrairement aux applications autonomes, ne peuvent utiliser les variables d'environnement du système. Par contre, en vue de configurer l'applet, les paramètres données dans la balise HTML <applet> peuvent être récupérés par la méthode Applet.getParmeter.

La forme générale de la balise APPLET est:

 
< APPLET
    CODE = appletFile 
    WIDTH = pixels 
    HEIGHT = pixels 
    [ CODEBASE = codebaseURL ] 
    [ ALT = alternateText ] 
    [ NAME = appletInstanceName ] 
    [ ALIGN = alignment ] 
    [ VSPACE = pixels ] 
    [ HSPACE = pixels ] 
>
[ < PARAM NAME = appletParameter1  VALUE = value  >] 
[ < PARAM NAME = appletParameter2  VALUE = value  >] 
. . .
[alternateHTML ]

 CODEBASE= codebaseURL

Attribut optionnel précisant la base URL de la classe de l'applet. Si cet attribut n'est pas spécifié, la base du document HTML est pris comme base URL de la classe.
 CODE = nom de fichier .class
Attribut obligatoire qui donne le nom de la classe qui contient l'applet. Ce nom de classe est toujours relatif à l'attribut CODEBASE; il n'est pas possible de donner un nom absolu.
 ALT = Texte
Permet d'afficher un message pour les browser qui comprennent la balise applet mais qui sont incapable d'exécuter les applets.
 NAME = appletInstanceName
Attribut optionnel donne l'instance d'une applet dans la même page HTML de manière à établir une communication entre applets.
 WIDTH = pixels et HEIGHT = pixels
Attributs obligatoire fixant la taille initiale de l'applet en pixels.
 ALIGN = alignment
Positionnement de l'applet dans une page HTML ; les valeurs permises sont left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom. Ce sont les mêmes valeurs que celles que l'on utilise pour la balise HTML IMG.
 VSPACE = pixels et HSPACE = pixels
Nombre de pixels entre l'applet et le reste de la page HTML comme pour la balise IMG.
 < PARAM NAME = appletParameter1 VALUE = value >
 Ces balises PARAM sont les seuls moyens de passer des arguments à une applet. C'est l'équivalent des arguments de la ligne de commande pour les applets. C'est le code l'applet qui se charge de récupérer ces arguments avec les méthodes getParameter.
 alternateHTML
Texte HTML affiché dans les browsers qui ne reconnaissent pas les balises APPLET. Ce texte est complètement ignoré par les autres browsers.
 

<html>
  <head>
    <title>Les balises HTML</title>
  </head>
  <body>
    <h1>Les balises HTML</h1> 
        <applet  
            code=Balise.class  
            width=200
            height=100 
            alt = "Votre browser ne peut exécuter cet applet"
            align = top
            vspace = 10 
            hspace = 10
        >  
        <param name=chaine1 value=Bonjour>
        <param name=chaine2 value="tout le monde">
Votre browser ne peut exécuter les applets Java
        </applet> 
  </body>
</html>
           

 

public class Balise extends java.applet.Applet {
  String s1, s2;  
  public void init() {
    s1 = getParameter("chaine1");
    s2 = getParameter("chaine2");  
  }
  public void paint(java.awt.Graphics g) {
    g.drawString(s1 + "\n" + s2 + "\n", 50, 50) ;
  }
}

Comme toute application graphique, une applet peut contenir les composants graphiques suivantes:

Une applet, comme toute application graphique, peut également réagir aux actions de l'utilisateur:

23.6 Applets et restrictions

L'exécution d'une applet est une opération ``sensible'' puisqu'une machine cliente exécute un code provenant d'une autre machine. Pour des raisons de sécurité, les applets ne peuvent accéder à toutes les ressources de la machine cliente. Chaque browser adopte sa propre politique de sécurité et sont susceptibles d'évoluer. Quoiqu'il en soit, ils ont en commun un certain nombre de caractéristiques. Une applet

23.7 Communication entre applets et browser

 

La classe Applet et l'interface AppletContexte permettent d'établir la communication entre une applet et le browser qui l'exécute.

Par exemple, la méthode showStatus de la classe Applet permet d'afficher une chaîne de caractères dans le coin du browser . La méthode showDocumentde l'interface AppletContext affiche sur le browser le document spécifié en argument.

 
public void showDocument(java.net.URL url)
public void showDocument(java.net.URL url, String targetWindow)

23.8 La classe Applet

 public final void setStub (AppletStub stub)

 

A TERMINER

 public boolean isActive ()
Détermine si l'applet est dans un état actif.
 public URL getDocumentBase ()
Retourne l'URL du document qui contient l'applet.
 public URL getCodeBase ()
Retourne l'URL de l'applet.
 public String getParameter (String name)
Retourne la valeur du paramètre de l'applet.
 public AppletContext getAppletContext ()
Retourne le contexte de l'applet.
 public void resize (int width, int height)
Redimensionne l'applet selon les valeurs données en arguments.
 public void resize (Dimension d)
Idem avec en argument un objet de type Dimension.
 public void showStatus (String msg)
Ecrit la chaîne spécifiée en argument dans la fenêtre d'état des browsers.
 public Image getImage (URL url)
Retourne un objet de type Image pour l'image spécifié en argument. Le paramètre url est une URL absolue. Si l'image spécifié n'est pas trouvé, il n'y aucun message d'erreur.
 public Image getImage (URL url, String name)
Retourne un objet de type Image pour l'image spécifié en argument. Le paramètre url est une URL absolue et le fichier image est donnée par l'argument name relativement à url. Si l'image spécifié n'est pas trouvé, il n'y aucun message d'erreur.
 public AudioClip getAudioClip (URL url)
Retourne un objet de type AudioClip pour le clip audio spécifié en argument. Si clip audio spécifié n'est pas trouvé, il n'y aucun message d'erreur.
 public AudioClip getAudioClip (URL url, String name)
Retourne un objet de type AudioClip pour le clip audio spécifié en argument. Le paramètre url est une URL absolue et le fichier clip audio est donnée par l'argument name relativement à url. Si clip audio spécifié n'est pas trouvé, il n'y aucun message d'erreur.
 public String getAppletInfo ()
Retourne les informations concernant l'applet: auteur, version et copyright.

 public String[][] getParameterInfo ()

 

A terminer

 public void play (URL url)
Déclenche la diffusion du clip audio.
 public void play (URL url, String name)
Déclenche la diffusion du clip audio.
 public void init ()
La méthode init est invoquée lors de l'l'initialisation de l'applet.
 public void start ()
La méthode start est invoquée lors du démarrage de l'applet.
 public void stop ()
La méthode stop est invoquée lors du arrêt de l'applet.
 public void destroy ()
La méthode destroy est invoquée lors du destruction de l'applet.

23.9 L'interface AppletContext

 public abstract AudioClip getAudioClip (URL url)

Retourne l'objet AudioClip correspondant au clip audio spécifié par url. Le paramètre url est une URL absolue.
 public abstract Image getImage (URL url)
Retourne un objet de type Image pour l'image spécifié en argument. Le paramètre url est une URL absolue. Si l'image spécifié n'est pas trouvé, il n'y aucun message d'erreur.
 public abstract Applet getApplet (String name)
Retourne l'objet Applet représentant l'applet en cours d'exécution sur la page HTML . Le paramètre name est une chaîne figurant soit dans la balise applet soit dans la balise param. Si aucune applet de ce nom n'existe, une référence null est retourné.
 public abstract Enumeration getApplets ()
Retourne la liste de tous les applets figurant dans le document du contexte de l'applet.
 public abstract void showDocument (URL url)
Remplace la page HTML courante par celle spécifiée par le paramètre url. Le paramètre url est une URL absolue.
 public abstract void showDocument (URL url, String target)
Affiche la page HTML spécifiée par le paramètre url dans le frame spécifié par le paramètre target. Le paramètre url est une URL absolue. Le paramètre target est l'une des chaînes suivantes:
"_self" frame courant "_parent"
 public abstract void showStatus (String status)
Ecrit la chaîne spécifiée en argument dans la fenêtre d'état des browsers.

23.10 Communication entre applets

Deux applets d'une même page HTML peuvent communiquer entre elles. Pour cela il suffit de :
 

public class Emetteur extends java.applet.Applet {
  String s = "coucou !";  
  public void init() {
    //    java.applet.Applet r = null;
    Recepteur    r = (Recepteur) getAppletContext().getApplet("Recepteur");
    r.faireQuelqueChose("Message de l'émetteur !! ");
  }

  public void paint(java.awt.Graphics g) {
    g.drawString(s, 50, 50) ;
  }
}

 

public class Recepteur extends java.applet.Applet {
  String s = "J'attends quelque chose";  
  public void paint(java.awt.Graphics g) {
    g.drawString(s, 50, 50) ;
  }
  public void faireQuelqueChose(String s) {
    this.s = s;  repaint();
  }
}

23.11 Applets et threads

 

A TERMINER


next up previous contents index
Next: 24 Découvrir la programmation Up: Java: Programmation graphique Previous: Java: Programmation graphique
Touraivane
6/12/1998