Introduzione alle applet

Cos'è un'applet

È una piccola applicazione a cui si accede su un server internet, trasportata sulla rete, automaticamente installata ed eseguita come parte di un documento web.

Quando un’applet arriva sul client, ha un accesso limitato alle risorse, in modo tale che sia in grado di produrre un’interfaccia utente variabile e di eseguire calcoli complessi senza che si corra il rischio di una propagazione di virus o di una violazione dell’integrità dei dati.

 

Esempio di applet

 import java.awt.* ;

import java.applet.* ;

 

public class Animazione extends Applet {

……

}

 

il primo import importa le classi AWT (Abstract Window Toolkit), necessarie perché le applet interagiscono con l’utente non mediante console ma mediante interfacce grafiche basate su finestre.

Il secondo import importa il pacchetto java.applet, che contiene la classe Applet (che contiene vari metodi che consentono di controllare in modo particolareggiato l’esecuzione dell’applet). Dopo gli import viene dichiarata la classe Animazione, che deve essere necessariamente public perché il codice esterno al programma dovrà essere in grado di accedervi.

Ogni applet creata deve essere una sottoclasse di Applet, quindi devono tutte importare java.applet ma anche java.awt perché tutte le applet vengono eseguite in una finestra (ed è necessario inserire il supporto per tale finestra).

 

Differenze tra applet e applicazioni

 

Esecuzione di un'applet 

Prima di eseguire un’applet il codice sorgente dell’applet deve essere compilato nello stesso modo in cui sono compilati i programmi. Dopo essere stata compilata, un’applet viene inserita in un file HTML, utilizzando il tag APPLET. Quindi occorre scrivere un file HTML, come si vede nel seguente esempio, nel quale mostriamo il file HTML che eseguirà Animazione:

 

<applet code=”Animazione” width=200 height=60>

</applet>

 

Le istruzioni width e height specificano le dimensioni dell’area di visualizzazione utilizzata dall’applet, in questo esempio la finestra sarà larga 200 pixel e alta 60 pixel. Chiameremo questo file RunApp.html.

Dopo aver creato questo file è possibile eseguire l’applet in diversi modi:

 

C:\>appletviewer RunApp.html

 

Per velocizzare il test dell’applet è anche possibile inserire un commento nella parte iniziale del codice sorgente di Java in modo tale che contenga il tag APPLET. In questo modo è possibile compilare l’applet semplicemente avviando il visualizzatore con il file del codice sorgente di Java. Utilizzando questo metodo, il file sorgente Animazione è simile al seguente:

import java.awt.* ;

import java.applet.* ;

/*

<applet code=”Animazione” width=200 height=60>

</applet>

*/

public class Animazione extends Applet {

……

}

 

Utilizzando l’ultimo metodo esposto, è possibile passare in modo ripetitivo tra lo sviluppo di un’applet utilizzando queste tre fasi.

  1. Modifica di un file sorgente Java.

  2. Compilazione del proprio programma.

  3. esecuzione del visualizzatore di applet, specificando il nome del file sorgente dell’applet. Il visualizzatore di applet individuerà il tag APPLET all’interno del commento ed eseguirà l’applet.

  

La classe Applet

La classe Applet fornisce tutto il supporto necessario per l’esecuzione l’avvio e l’arresto dell’applet.

Inoltre, mette a disposizione i metodi che caricano e visualizzano le immagini e che caricano e riproducono brani audio. Applet è un’estensione della classe Panel dell’AWT. A sua volta, Panel è un’estensione di Container, che è un’estensione di Component. Queste classi forniscono il supporto per l’interfaccia grafica a finestre di Java. Quindi, Applet fornisce tutto il supporto necessario per le attività basate sulle finestre.

 

ALCUNI METODI DELLA CLASSE APPLET

METODO

DESCRIZIONE

void destroy()

Chiamato dal browser immediatamente prima del termine di un’applet. L’applet ridefinisce questo metodo se deve eseguire una “pulizia” prima della sua distruzione.

AppletContext getAppletContext()

Restituisce il contesto associato all’applet.

String getAppletInfo()

Restituisce una stringa che descrive l’applet.

AudioClip getAudioClip(URL url)

Restituisce un oggetto che incapsula il brano audio trovato nella posizione specificata da url.

AudioClip getAudioClip(URL url, String nomeClip)

Restituisce un oggetto che incapsula il brano audio trovato nella posizione specificata da url e avente il nome specificato da nomeClip.

URL getCodeBase()

Restituisce l’URL associato all’applet chiamante.

URL getDocumentBase()

Restituisce l’URL del documento HTML che chiama l’applet.

Image getImage(URL url)

Restituisce un’oggetto che incapsula l’immagine trovata nella posizione specificata da url.

Image getImage(URL url, String nomeImmagine)

Restituisce un’oggetto che incapsula l’immagine trovata nella posizione specificata da url e avente il nome specificato da nomeImmagine.

String getParameter(String nomeParam)

Restituisce il parametro associato a nomeParam. Se il parametro specificato non viene trovato, viene restituito.

String[] [] getParameterInfo()

Restituisce una tabella che descrive i parametri riconosciuti dall’applet. Ogni voce della tabella deve essere costituita da tre stringhe contenenti il nome del parametro, una descrizione del tipo e/o intervallo e una spiegazione dello scopo.

 

Architettura delle applet

Le applet sono event-driven. Quindi un’applet attende che si verifichi un evento, ed è proprio l’utente che avvia l’interazione con l’applet e non viceversa.

Successivamente, l’AWT informa l’applet dell’evento chiamando un gestore di eventi che è stato ridefinito dall’applet. Quando ciò avviene, l’applet deve eseguire l’azione appropriata e poi restituire rapidamente il controllo all’AWT.

Quindi un’applet non deve entrare in una “modalità” di funzionamento, in cui mantiene il controllo per un lungo periodo di tempo, ma deve eseguire azioni specifiche in risposta agli eventi e poi restituire il controllo al sistema run-time dell’AWT. Nelle situazioni in cui l’applet  deve eseguire un’operazione ripetitiva (ad es. visualizzare un messaggio che scorre nella finestra), occorre avviare un’ulteriore thread di esecuzione.

 

Ridefinire i metodi della classe Applet

Molto spesso all’interno delle applet vengono ridefiniti i metodi che rappresentano il meccanismo base mediante il quale il browser o il visualizzatore di applet si interfaccia con l’applet e ne controlla l’esecuzione. Quattro di questi metodi, init(), start(), stop() e destroy(), sono definiti da Applet. Un altro, paint(), è definito dalla classe Component dell’AWT. Sono previste le implementazioni di default di tutti questi metodi.

 

Quando inizia un’applet, l’AWT chiama questi metodi, nel seguente ordine:

  1. init();

  2. start();

  3. paint() - update().

Quando un’applet viene terminata, si verifica la seguente sequenza di chiamate di metodi:

  1. stop();

  2. destroy().

 

Visualizzazione delle applet

Le applet vengono visualizzate in una finestra e utilizzano l’AWT per eseguire l’input e l’output. Di seguito mostriamo alcuni metodi utili per la visualizzazione delle applet.

 

drawString()

public void drawString(String messaggio, int x, int y)

dove messaggio è la stringa da visualizzare partendo da x, y. Questo metodo non riconosce i caratteri di nuova riga perciò se si desidera iniziare una nuova riga di testo occorre farlo manualmente, specificando la posizione x, y.

 

setBackground()

void setBackground(Color nuovocolore)

dove nuovocolore specifica il colore (per esempio per impostare il verde setBackground(Color.green)).

 

setForeground()

void setForeground(Color nuovocolore)

dove nuovocolore specifica il colore (per esempio per impostare il verde setForeground(Color.green)).

 

getBackground()

Color getBackground()

 

getForeground()

Color getForeground()

Utilizzo della finestra di stato

Oltre a visualizzare le informazioni nella propria finestra, un’applet può anche generare un messaggio nella finestra di stato del browser o del visualizzatore di applet su cui viene eseguito. A questo scopo, occorre chiamare showStatus() con la stringa che si desidera visualizzare. È consigliabile utilizzare la finestra di stato per fornire all’utente il feedback di ciò che si sta verificando nell’applet, proporre opzioni o eventualmente riferire alcuni tipi di errori.