Java - Nozioni di base sull'applet

Un appletè un programma Java che viene eseguito in un browser Web. Un'applet può essere un'applicazione Java completamente funzionante perché dispone dell'intera API Java.

Esistono alcune importanti differenze tra un'applet e un'applicazione Java autonoma, tra cui le seguenti:

  • Un applet è una classe Java che estende la classe java.applet.Applet.

  • Un metodo main () non viene invocato su un'applet e una classe applet non definirà main ().

  • Gli applet sono progettati per essere incorporati in una pagina HTML.

  • Quando un utente visualizza una pagina HTML che contiene un'applet, il codice per l'applet viene scaricato sulla macchina dell'utente.

  • È necessaria una JVM per visualizzare un'applet. La JVM può essere un plug-in del browser Web o un ambiente di runtime separato.

  • La JVM sulla macchina dell'utente crea un'istanza della classe applet e richiama vari metodi durante la vita dell'applet.

  • Le applet hanno regole di sicurezza rigorose che vengono applicate dal browser Web. La sicurezza di un'applet viene spesso definita sicurezza sandbox, confrontando l'applet con un bambino che gioca in una sandbox con varie regole che devono essere seguite.

  • Altre classi di cui l'applet necessita possono essere scaricate in un singolo file JAR (Java Archive).

Ciclo di vita di un'applet

Quattro metodi nella classe Applet ti danno il framework su cui costruire qualsiasi applet seria -

  • init- Questo metodo è inteso per qualsiasi inizializzazione sia necessaria per l'applet. Viene chiamato dopo che i tag param all'interno del tag dell'applet sono stati elaborati.

  • start- Questo metodo viene chiamato automaticamente dopo che il browser chiama il metodo init. Viene chiamato anche ogni volta che l'utente torna alla pagina contenente l'applet dopo essere passato ad altre pagine.

  • stop- Questo metodo viene chiamato automaticamente quando l'utente esce dalla pagina su cui si trova l'applet. Può quindi essere richiamato ripetutamente nella stessa applet.

  • destroy- Questo metodo viene chiamato solo quando il browser si chiude normalmente. Poiché gli applet sono pensati per vivere su una pagina HTML, normalmente non dovresti lasciare le risorse dietro dopo che un utente ha lasciato la pagina che contiene l'applet.

  • paint- Richiamato immediatamente dopo il metodo start () e ogni volta che l'applet deve ridisegnarsi nel browser. Il metodo paint () è effettivamente ereditato da java.awt.

Un'applet "Hello, World"

Di seguito è riportato un semplice applet denominato HelloWorldApplet.java -

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

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

Queste istruzioni di importazione portano le classi nell'ambito della nostra classe applet -

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

Senza queste istruzioni di importazione, il compilatore Java non riconoscerebbe le classi Applet e Graphics, a cui fa riferimento la classe applet.

La classe Applet

Ogni applet è un'estensione della classe java.applet.Applet . La classe Applet di base fornisce metodi che una classe Applet derivata può chiamare per ottenere informazioni e servizi dal contesto del browser.

Questi includono metodi che eseguono le seguenti operazioni:

  • Ottieni i parametri dell'applet
  • Ottieni il percorso di rete del file HTML che contiene l'applet
  • Ottieni il percorso di rete della directory della classe dell'applet
  • Stampa un messaggio di stato nel browser
  • Recupera un'immagine
  • Recupera un clip audio
  • Riproduci un clip audio
  • Ridimensiona l'applet

Inoltre, la classe Applet fornisce un'interfaccia mediante la quale il visualizzatore o il browser ottiene informazioni sull'applet e controlla l'esecuzione dell'applet. Lo spettatore può -

  • Richiedi informazioni su autore, versione e copyright dell'applet
  • Richiedi una descrizione dei parametri che l'applet riconosce
  • Inizializza l'applet
  • Distruggi l'applet
  • Avvia l'esecuzione dell'applet
  • Ferma l'esecuzione dell'applet

La classe Applet fornisce implementazioni predefinite di ciascuno di questi metodi. Tali implementazioni possono essere sovrascritte secondo necessità.

L'applet "Hello, World" è completa così com'è. L'unico metodo ignorato è il metodo paint.

Invocare un'applet

È possibile richiamare un'applet incorporando le direttive in un file HTML e visualizzando il file tramite un visualizzatore di applet o un browser abilitato per Java.

Il tag <applet> è la base per incorporare un'applet in un file HTML. Di seguito è riportato un esempio che richiama 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- È possibile fare riferimento al tag dell'applet HTML per saperne di più sulla chiamata di applet da HTML.

L'attributo code del tag <applet> è obbligatorio. Specifica la classe Applet da eseguire. Larghezza e altezza sono necessarie anche per specificare la dimensione iniziale del pannello in cui viene eseguita un'applet. La direttiva applet deve essere chiusa con un tag </applet>.

Se un'applet accetta parametri, i valori possono essere passati per i parametri aggiungendo tag <param> tra <applet> e </applet>. Il browser ignora il testo e altri tag tra i tag dell'applet.

I browser non abilitati a Java non elaborano <applet> e </applet>. Pertanto, tutto ciò che appare tra i tag, non correlato all'applet, è visibile nei browser non abilitati a Java.

Il visualizzatore o il browser cerca il codice Java compilato nella posizione del documento. Per specificare diversamente, usa l'attributo codebase del tag <applet> come mostrato -

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

Se un'applet risiede in un pacchetto diverso da quello predefinito, il pacchetto di contenimento deve essere specificato nell'attributo code utilizzando il carattere punto (.) Per separare i componenti pacchetto / classe. Ad esempio:

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

Recupero dei parametri dell'applet

L'esempio seguente mostra come fare in modo che un'applet risponda ai parametri di configurazione specificati nel documento. Questa applet mostra un motivo a scacchiera di nero e un secondo colore.

Il secondo colore e la dimensione di ogni quadrato possono essere specificati come parametri per l'applet all'interno del documento.

CheckerApplet ottiene i suoi parametri nel metodo init (). Può anche ottenere i suoi parametri nel metodo paint (). Tuttavia, ottenere i valori e salvare le impostazioni una volta all'inizio dell'applet, invece che a ogni aggiornamento, è comodo ed efficiente.

Il visualizzatore di applet o il browser chiama il metodo init () di ogni applet che esegue. Il visualizzatore chiama init () una volta, subito dopo aver caricato l'applet. (Applet.init () è implementato per non fare nulla.) Sostituire l'implementazione predefinita per inserire il codice di inizializzazione personalizzato.

Il metodo Applet.getParameter () recupera un parametro dato il nome del parametro (il valore di un parametro è sempre una stringa). Se il valore è numerico o altri dati non di carattere, la stringa deve essere analizzata.

Quello che segue è uno scheletro di 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) {}
}

Ecco i metodi init () e parseSquareSize () di 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 chiama parseSquareSize () per analizzare il parametro squareSize. parseSquareSize () chiama il metodo della libreria Integer.parseInt (), che analizza una stringa e restituisce un numero intero. Integer.parseInt () genera un'eccezione ogni volta che il suo argomento non è valido.

Pertanto, parseSquareSize () rileva le eccezioni, invece di consentire all'applet di fallire in caso di input errato.

L'applet chiama parseColor () per analizzare il parametro color in un valore Color. parseColor () esegue una serie di confronti di stringhe per abbinare il valore del parametro al nome di un colore predefinito. È necessario implementare questi metodi per far funzionare l'applet.

Specifica dei parametri dell'applet

Quello che segue è un esempio di un file HTML con un CheckerApplet incorporato in esso. Il file HTML specifica entrambi i parametri all'applet tramite il tag <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 - I nomi dei parametri non fanno distinzione tra maiuscole e minuscole.

Conversione dell'applicazione in applet

È facile convertire un'applicazione Java grafica (ovvero un'applicazione che utilizza AWT e che puoi avviare con il programma di avvio Java) in un'applet che puoi incorporare in una pagina web.

Di seguito sono riportati i passaggi specifici per convertire un'applicazione in un'applet.

  • Crea una pagina HTML con il tag appropriato per caricare il codice dell'applet.

  • Fornisci una sottoclasse della classe JApplet. Rendi pubblico questo corso. In caso contrario, l'applet non può essere caricata.

  • Elimina il metodo principale nell'applicazione. Non costruire una finestra con cornice per l'applicazione. La tua applicazione verrà visualizzata all'interno del browser.

  • Spostare qualsiasi codice di inizializzazione dal costruttore della finestra del frame al metodo init dell'applet. Non è necessario costruire esplicitamente l'oggetto applet. Il browser lo istanzia per te e chiama il metodo init.

  • Rimuovere la chiamata a setSize; per le applet, il dimensionamento viene eseguito con i parametri di larghezza e altezza nel file HTML.

  • Rimuovere la chiamata a setDefaultCloseOperation. Non è possibile chiudere un'applet; termina alla chiusura del browser.

  • Se l'applicazione chiama setTitle, elimina la chiamata al metodo. Le applet non possono avere barre del titolo. (Puoi, ovviamente, dare un titolo alla pagina web stessa, usando il tag del titolo HTML.)

  • Non chiamare setVisible (true). L'applet viene visualizzata automaticamente.

Gestione degli eventi

Le applet ereditano un gruppo di metodi di gestione degli eventi dalla classe Container. La classe Container definisce diversi metodi, come processKeyEvent e processMouseEvent, per la gestione di particolari tipi di eventi, e quindi un metodo catch-all chiamato processEvent.

Per reagire a un evento, un'applet deve sovrascrivere il metodo specifico dell'evento appropriato.

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! ");
   }
}

Ora, chiamiamo questa applet come segue:

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

Inizialmente, l'applet mostrerà "inizializzazione dell'applet. Avvio dell'applet". Quindi, una volta che si fa clic all'interno del rettangolo, verrà visualizzato anche "clic del mouse".

Visualizzazione delle immagini

Un'applet può visualizzare immagini nel formato GIF, JPEG, BMP e altri. Per visualizzare un'immagine all'interno dell'applet, utilizza il metodo drawImage () che si trova nella classe java.awt.Graphics.

Di seguito è riportato un esempio che illustra tutti i passaggi per mostrare le immagini:

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);
   }  
}

Ora, chiamiamo questa applet come segue:

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

Riproduzione di audio

Un'applet può riprodurre un file audio rappresentato dall'interfaccia AudioClip nel pacchetto java.applet. L'interfaccia AudioClip ha tre metodi, tra cui:

  • public void play() - Riproduce il clip audio una volta, dall'inizio.

  • public void loop() - Fa sì che il clip audio venga riprodotto continuamente.

  • public void stop() - Arresta la riproduzione del clip audio.

Per ottenere un oggetto AudioClip, è necessario richiamare il metodo getAudioClip () della classe Applet. Il metodo getAudioClip () restituisce immediatamente, indipendentemente dal fatto che l'URL si risolva o meno in un file audio effettivo. Il file audio non viene scaricato finché non si tenta di riprodurre il clip audio.

Di seguito è riportato un esempio che illustra tutti i passaggi per riprodurre 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();
      }
   }
}

Ora, chiamiamo questa applet come segue:

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

Puoi usare test.wav sul tuo PC per testare l'esempio sopra.