4. Multimedialità in ambiente WWW


4.2 Le applicazioni Applet

Una applicazione applet è un programma Java capace di essere eseguito da un browser Web. Come tutti gli altri programmi implementati in linguaggio Java, un applet è costituito da classi. A differenza però degli altri programmi usuali, la classe da cui ha inizio l'esecuzione di un applet deve essere una sottoclasse della classe java.awt.Applet. Quest'ultima classe, infatti, possiede i metodi che permettono il controllo (messa in esecuzione, arresto, riavvio, etc.) dello applet:

Questi metodi (in particolare start e stop) sono analoghi a quelli che si incontrano nella classe java.lang.Thread. In effetti, uno applet è sempre costituito da un thread, ovvero una routine che "gira" al contempo con altre routine. Perciò, quando uno applet è messo in esecuzione da un browser Web, esso non "gira" in esclusiva, ovvero esso non assorbe tutte le risorse del client Web. Se al contrario il browser Web passasse totalmente il controllo dell'esecuzione allo applet, il browser stesso verrebbe bloccato. Di conseguenza, una volta caricato lo applet, non si potrebbe più, per esempio, scorrere la pagina HTML che contiene lo applet stesso, oppure, sempre per esempio, non si avrebbe la capacità di cambiare documento HTML. Ogni applet, se non fosse costituito da un thread, avrebbe bisogno di essere dotato esplicitamente di un comando che provvede alla interruzione dello applet stesso da parte dell'utente. Ciò sarebbe ovviamente molto fastidioso, soprattutto per le animazioni inserite nei documenti HTML. Una animazione, infatti, è generata da uno applet specifico che provvede a visualizzare in rapida successione delle immagini nella finestra del browser. Se l'animazione non girasse in background, l'utente non potrebbe scorrere o cambiare la pagina HTML, ma sarebbe costretto ogni volta ad interrompere lo applet che genera l'animazione stessa. Ciò ovviamente ostacolerebbe non poco la navigazione in Internet. Invece, se gli applet "girano" in background, le pagine HTML che li contengono sono maneggiabili e leggibili al pari delle pagine HTML normali. Inoltre, se gli applet non fossero costituiti da thread, non si potrebbero mandare in esecuzione al contempo più applet nello stesso documento HTML. L'utente sarebbe costretto a passare esplicitamente da uno applet ad un altro. In altre parole, per esempio, l'utente non potrebbe osservare più di una animazione alla volta.

Per tutti questi motivi, ogni applet parte come un thread separato. Conseguentemente, il controllo dell'esecuzione passa dallo applet al browser che lo esegue, lasciando così all'utente la capacità di manovrare il browser stesso. Da notare che la capacità di linguaggio multithreaded di Java si conservano intatte negli applet. Pertanto, in un programma applet si possono inizializzare altri thread e mandare questi ultimi in esecuzione. Ciò è consigliato quando nella stessa pagina HTML sono contenuti più applet, alcuni di quali contengono routine gravose dal punto di vista dai calcoli o delle operazioni che eseguono. Usando più thread, gli applet che hanno bisogno di maggiori risorse non bloccano gli altri applet, dando la possibilità all'utente di osservare rapidamente almeno quest'ultimi. Per creare una applicazione applet, è necessario creare innanzitutto una sottoclasse della classe java.awt.Applet:
public class Coulomb extends java.applet.Applet { ...

Dopo di ciò, nella sottoclasse appena creata è necessario invocare i metodi init(), start(), stop() e destroy(), sovrascrivendoli (override) se necessario. Segue la descrizione di questi metodi.

Invocati e riscritti i metodi sopra descritti in una sottoclasse della classe Applet, il resto di un programma applet è del tutto analogo ad un programma normale Java. Se si desidera che lo applet sia eseguibile pure come programma convenzionale lanciabile da shell di sistema operativo, è necessario inserire anche il metodo main nella sottoclasse applet. Il metodo main sarà ignorato quando lo applet viene eseguito in ambiente Web, mentre esso costituirà il punto di inizio quando il programma viene chiamato da una shell di sistema operativo.