Java - Principes de base de l'applet

Un appletest un programme Java qui s'exécute dans un navigateur Web. Une applet peut être une application Java entièrement fonctionnelle car elle dispose de l'ensemble de l'API Java.

Il existe des différences importantes entre une applet et une application Java autonome, notamment les suivantes:

  • Une applet est une classe Java qui étend la classe java.applet.Applet.

  • Une méthode main () n'est pas appelée sur une applet, et une classe d'applet ne définira pas main ().

  • Les applets sont conçus pour être intégrés dans une page HTML.

  • Lorsqu'un utilisateur affiche une page HTML contenant une applet, le code de l'applet est téléchargé sur l'ordinateur de l'utilisateur.

  • Une JVM est requise pour afficher une applet. La JVM peut être soit un plug-in du navigateur Web, soit un environnement d'exécution distinct.

  • La machine virtuelle Java sur la machine de l'utilisateur crée une instance de la classe applet et invoque diverses méthodes pendant la durée de vie de l'applet.

  • Les applets ont des règles de sécurité strictes qui sont appliquées par le navigateur Web. La sécurité d'une applet est souvent appelée sécurité sandbox, comparant l'applet à un enfant jouant dans un sandbox avec diverses règles qui doivent être suivies.

  • Les autres classes dont l'applet a besoin peuvent être téléchargées dans un seul fichier Java Archive (JAR).

Cycle de vie d'une applet

Quatre méthodes de la classe Applet vous donnent le cadre sur lequel vous construisez toute applet sérieuse -

  • init- Cette méthode est destinée à toutes les initialisations nécessaires à votre applet. Il est appelé après le traitement des balises param à l'intérieur de la balise applet.

  • start- Cette méthode est automatiquement appelée après que le navigateur a appelé la méthode init. Il est également appelé chaque fois que l'utilisateur retourne sur la page contenant l'applet après être allé sur d'autres pages.

  • stop- Cette méthode est automatiquement appelée lorsque l'utilisateur quitte la page sur laquelle se trouve l'applet. Il peut donc être appelé à plusieurs reprises dans la même applet.

  • destroy- Cette méthode n'est appelée que lorsque le navigateur s'arrête normalement. Étant donné que les applets sont conçues pour vivre sur une page HTML, vous ne devez normalement pas laisser de ressources après qu'un utilisateur quitte la page qui contient l'applet.

  • paint- Appelé immédiatement après la méthode start (), et aussi chaque fois que l'applet doit se repeindre dans le navigateur. La méthode paint () est en fait héritée de java.awt.

Une applet "Hello, World"

Voici une simple applet nommée HelloWorldApplet.java -

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

public class HelloWorldApplet extends Applet {
   public void paint (Graphics g) {
      g.drawString ("Hello World", 25, 50);
   }
}

Ces instructions d'importation amènent les classes dans la portée de notre classe d'applet -

  • java.applet.Applet
  • java.awt.Graphics

Sans ces instructions d'importation, le compilateur Java ne reconnaîtrait pas les classes Applet et Graphics auxquelles la classe applet fait référence.

La classe Applet

Chaque applet est une extension de la classe java.applet.Applet . La classe Applet de base fournit des méthodes qu'une classe Applet dérivée peut appeler pour obtenir des informations et des services à partir du contexte du navigateur.

Ces méthodes incluent les méthodes suivantes:

  • Obtenir les paramètres de l'applet
  • Obtenez l'emplacement réseau du fichier HTML contenant l'applet
  • Obtenez l'emplacement réseau du répertoire de classe de l'applet
  • Imprimer un message d'état dans le navigateur
  • Récupérer une image
  • Récupérer un clip audio
  • Lire un clip audio
  • Redimensionner l'applet

En outre, la classe Applet fournit une interface par laquelle le visualiseur ou le navigateur obtient des informations sur l'applet et contrôle l'exécution de l'applet. Le spectateur peut -

  • Demander des informations sur l'auteur, la version et les droits d'auteur de l'applet
  • Demander une description des paramètres reconnus par l'applet
  • Initialiser l'applet
  • Détruire l'applet
  • Lancer l'exécution de l'applet
  • Arrêtez l'exécution de l'applet

La classe Applet fournit des implémentations par défaut de chacune de ces méthodes. Ces implémentations peuvent être remplacées si nécessaire.

L'applet "Hello, World" est complet tel quel. La seule méthode remplacée est la méthode paint.

Invoquer une applet

Une applet peut être appelée en incorporant des directives dans un fichier HTML et en visualisant le fichier via une visionneuse d'applet ou un navigateur compatible Java.

La balise <applet> est la base de l'incorporation d'une applet dans un fichier HTML. Voici un exemple qui appelle l'applet "Hello, World" -

<html>
   <title>The Hello, World Applet</title>
   <hr>
   <applet code = "HelloWorldApplet.class" width = "320" height = "120">
      If your browser was Java-enabled, a "Hello, World"
      message would appear here.
   </applet>
   <hr>
</html>

Note- Vous pouvez vous référer à HTML Applet Tag pour en savoir plus sur l'appel d'applet à partir de HTML.

L'attribut de code de la balise <applet> est obligatoire. Il spécifie la classe Applet à exécuter. La largeur et la hauteur sont également requises pour spécifier la taille initiale du panneau dans lequel une applet s'exécute. La directive applet doit être fermée avec une balise </applet>.

Si une applet prend des paramètres, des valeurs peuvent être passées pour les paramètres en ajoutant des balises <param> entre <applet> et </applet>. Le navigateur ignore le texte et les autres balises entre les balises de l'applet.

Les navigateurs non compatibles Java ne traitent pas <applet> et </applet>. Par conséquent, tout ce qui apparaît entre les balises, sans rapport avec l'applet, est visible dans les navigateurs non compatibles Java.

Le visualiseur ou le navigateur recherche le code Java compilé à l'emplacement du document. Pour spécifier le contraire, utilisez l'attribut codebase de la balise <applet> comme indiqué -

<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
   width = "320" height = "120">

Si une applet réside dans un package autre que celui par défaut, le package de stockage doit être spécifié dans l'attribut de code en utilisant le caractère point (.) Pour séparer les composants du package / classe. Par exemple -

<applet  = "mypackage.subpackage.TestApplet.class" 
   width = "320" height = "120">

Obtention des paramètres d'applet

L'exemple suivant montre comment faire en sorte qu'une applet réponde aux paramètres de configuration spécifiés dans le document. Cette applet affiche un motif en damier de noir et une seconde couleur.

La deuxième couleur et la taille de chaque carré peuvent être spécifiées comme paramètres de l'applet dans le document.

CheckerApplet obtient ses paramètres dans la méthode init (). Il peut également obtenir ses paramètres dans la méthode paint (). Cependant, obtenir les valeurs et enregistrer les paramètres une fois au début de l'applet, au lieu de chaque actualisation, est pratique et efficace.

Le visualiseur ou le navigateur d'applet appelle la méthode init () de chaque applet qu'il exécute. Le visualiseur appelle init () une fois, immédiatement après le chargement de l'applet. (Applet.init () est implémenté pour ne rien faire.) Remplacez l'implémentation par défaut pour insérer un code d'initialisation personnalisé.

La méthode Applet.getParameter () récupère un paramètre en fonction du nom du paramètre (la valeur d'un paramètre est toujours une chaîne). Si la valeur est numérique ou autre donnée non-caractère, la chaîne doit être analysée.

Ce qui suit est un squelette de CheckerApplet.java -

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

public class CheckerApplet extends Applet {
   int squareSize = 50;   // initialized to default size
   public void init() {}
   private void parseSquareSize (String param) {}
   private Color parseColor (String param) {}
   public void paint (Graphics g) {}
}

Voici les méthodes init () et private parseSquareSize () de CheckerApplet -

public void init () {
   String squareSizeParam = getParameter ("squareSize");
   parseSquareSize (squareSizeParam);
   
   String colorParam = getParameter ("color");
   Color fg = parseColor (colorParam);
   
   setBackground (Color.black);
   setForeground (fg);
}

private void parseSquareSize (String param) {
   if (param == null) return;
   try {
      squareSize = Integer.parseInt (param);
   } catch (Exception e) {
      // Let default value remain
   }
}

L'applet appelle parseSquareSize () pour analyser le paramètre squareSize. parseSquareSize () appelle la méthode de bibliothèque Integer.parseInt (), qui analyse une chaîne et renvoie un entier. Integer.parseInt () lève une exception chaque fois que son argument n'est pas valide.

ParseSquareSize () intercepte donc les exceptions, plutôt que de laisser l'applet échouer sur une mauvaise entrée.

L'applet appelle parseColor () pour analyser le paramètre de couleur en une valeur Color. parseColor () effectue une série de comparaisons de chaînes pour faire correspondre la valeur du paramètre au nom d'une couleur prédéfinie. Vous devez implémenter ces méthodes pour faire fonctionner cette applet.

Spécification des paramètres d'applet

Voici un exemple de fichier HTML avec un CheckerApplet intégré. Le fichier HTML spécifie les deux paramètres de l'applet au moyen de la balise <param>.

<html>
   <title>Checkerboard Applet</title>
   <hr>
   <applet code = "CheckerApplet.class" width = "480" height = "320">
      <param name = "color" value = "blue">
      <param name = "squaresize" value = "30">
   </applet>
   <hr>
</html>

Note - Les noms de paramètres ne sont pas sensibles à la casse.

Conversion d'application en applets

Il est facile de convertir une application Java graphique (c'est-à-dire une application qui utilise l'AWT et que vous pouvez démarrer avec le lanceur de programme Java) en une applet que vous pouvez intégrer dans une page Web.

Voici les étapes spécifiques pour convertir une application en applet.

  • Créez une page HTML avec la balise appropriée pour charger le code de l'applet.

  • Fournissez une sous-classe de la classe JApplet. Rendez ce cours public. Sinon, l'applet ne peut pas être chargé.

  • Éliminez la méthode principale de l'application. Ne créez pas de fenêtre cadre pour l'application. Votre application sera affichée dans le navigateur.

  • Déplacez tout code d'initialisation du constructeur de fenêtre frame vers la méthode init de l'applet. Vous n'avez pas besoin de construire explicitement l'objet applet. Le navigateur l'instancie pour vous et appelle la méthode init.

  • Supprimez l'appel à setSize; pour les applets, le dimensionnement se fait avec les paramètres de largeur et de hauteur dans le fichier HTML.

  • Supprimez l'appel à setDefaultCloseOperation. Une applet ne peut pas être fermée; il se termine lorsque le navigateur se ferme.

  • Si l'application appelle setTitle, supprimez l'appel à la méthode. Les applets ne peuvent pas avoir de barres de titre. (Vous pouvez, bien sûr, donner un titre à la page Web elle-même, en utilisant la balise de titre HTML.)

  • N'appelez pas setVisible (true). L'applet s'affiche automatiquement.

Gestion des événements

Les applets héritent d'un groupe de méthodes de gestion des événements de la classe Container. La classe Container définit plusieurs méthodes, telles que processKeyEvent et processMouseEvent, pour gérer des types particuliers d'événements, puis une méthode fourre-tout appelée processEvent.

Pour réagir à un événement, une applet doit remplacer la méthode appropriée spécifique à l'événement.

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;

public class ExampleEventHandling extends Applet implements MouseListener {
   StringBuffer strBuffer;

   public void init() {
      addMouseListener(this);
      strBuffer = new StringBuffer();
      addItem("initializing the apple ");
   }

   public void start() {
      addItem("starting the applet ");
   }

   public void stop() {
      addItem("stopping the applet ");
   }

   public void destroy() {
      addItem("unloading the applet");
   }

   void addItem(String word) {
      System.out.println(word);
      strBuffer.append(word);
      repaint();
   }

   public void paint(Graphics g) {
      // Draw a Rectangle around the applet's display area.
      g.drawRect(0, 0, 
      getWidth() - 1,
      getHeight() - 1);

      // display the string inside the rectangle.
      g.drawString(strBuffer.toString(), 10, 20);
   }

   
   public void mouseEntered(MouseEvent event) {
   }
   public void mouseExited(MouseEvent event) {
   }
   public void mousePressed(MouseEvent event) {
   }
   public void mouseReleased(MouseEvent event) {
   }
   public void mouseClicked(MouseEvent event) {
      addItem("mouse clicked! ");
   }
}

Maintenant, appelons cet applet comme suit -

<html>
   <title>Event Handling</title>
   <hr>
   <applet code = "ExampleEventHandling.class" 
      width = "300" height = "300">
   </applet>
   <hr>
</html>

Au départ, l'applet affichera "Initialisation de l'applet. Démarrage de l'applet". Ensuite, une fois que vous avez cliqué à l'intérieur du rectangle, "clic de souris" sera également affiché.

Affichage des images

Une applet peut afficher des images au format GIF, JPEG, BMP et autres. Pour afficher une image dans l'applet, vous utilisez la méthode drawImage () de la classe java.awt.Graphics.

Voici un exemple illustrant toutes les étapes pour afficher les images -

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

public class ImageDemo extends Applet {
   private Image image;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String imageURL = this.getParameter("image");
      if(imageURL == null) {
         imageURL = "java.jpg";
      }
      try {
         URL url = new URL(this.getDocumentBase(), imageURL);
         image = context.getImage(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         // Display in browser status bar
         context.showStatus("Could not load image!");
      }
   }
   
   public void paint(Graphics g) {
      context.showStatus("Displaying image");
      g.drawImage(image, 0, 0, 200, 84, null);
      g.drawString("www.javalicense.com", 35, 100);
   }  
}

Maintenant, appelons cet applet comme suit -

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "300" height = "200">
      <param name = "image" value = "java.jpg">
   </applet>
   <hr>
</html>

Lecture audio

Une applet peut lire un fichier audio représenté par l'interface AudioClip dans le package java.applet. L'interface AudioClip a trois méthodes, y compris -

  • public void play() - Lit le clip audio une fois, depuis le début.

  • public void loop() - Provoque la lecture continue du clip audio.

  • public void stop() - Arrête la lecture du clip audio.

Pour obtenir un objet AudioClip, vous devez appeler la méthode getAudioClip () de la classe Applet. La méthode getAudioClip () renvoie immédiatement, que l'URL se résout ou non en un fichier audio réel. Le fichier audio n'est pas téléchargé tant qu'une tentative de lecture du clip audio n'est pas effectuée.

Voici un exemple illustrant toutes les étapes pour lire un audio -

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

public class AudioDemo extends Applet {
   private AudioClip clip;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String audioURL = this.getParameter("audio");
      if(audioURL == null) {
         audioURL = "default.au";
      }
      try {
         URL url = new URL(this.getDocumentBase(), audioURL);
         clip = context.getAudioClip(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         context.showStatus("Could not load audio file!");
      }
   }
   
   public void start() {
      if(clip != null) {
         clip.loop();
      }
   }
   
   public void stop() {
      if(clip != null) {
         clip.stop();
      }
   }
}

Maintenant, appelons cet applet comme suit -

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "0" height = "0">
      <param name = "audio" value = "test.wav">
   </applet>
   <hr>
</html>

Vous pouvez utiliser test.wav sur votre PC pour tester l'exemple ci-dessus.