Applet Java

Un **''applet'' Java** es un applet scribite in le linguage de programmation Java. Le applets de Java pote executar se in un navigator web usante le machina virtual Java (Java Virtual Machine, JVM), o in le AppletViewer de Sun. Les applets Java ont été abandonnées par Java 9 en 2017.

Inter lor characteristicas nos pote mentionar un schema de securitate qui permitte que le *applets* se executante in le computator non ha accesso al partes sensibile (per exemplo illo non pote scriber archivos), a minus de obtener le permissiones necessari in le systema; le disavantage de iste accostamento es que le livration de permissiones es embarassose pro le usator commun, e isto joca contra un del objectivos del *applets Java*: provider un forma facile de executar applicationes ab le navigator web.

In Java, un *applet* es un programma qui pote incrustar se in un documento HTML, in altere parolas, in un pagina web. Quando un navigator web carga un pagina web qui contine un *applet*, le *applet* es discargate in le navigator web e comencia a executar se. Isto permitte crear programmas le quales un qualcunque usator pote executar solmente in cargante le pagina web in su navigator web.

Le navigator web qui carga e executa le *applet* se cognosce in terminos generic como le "container" del *applets*. Le kit de disveloppamento de programmatura pro Java Standard Edition 7 (1.7.1 --Version le plus actual, ponite in marcha le 18 de octobre 2011) include un container de *applets*, appellate *appletviewer*, pro probar le *applets* ante incrustar lo in un pagina web.

## Avantages
Le *applets* de Java usualmente ha le sequente avantages:
* Illos functiona in multe platteformas (functiona in Linux, Windows, Mac OS X, e in qualcunque systema de operation pro le qual il existe un Machina Virtual Java (JVM)). 
* Le mesme *applet* pote travaliar in "tote" le versiones de Java, e non solmente in le ultime version del extension. Totevia, si un *applet* require un version posterior del Ambiante de Execution Java (JRE), le cliente essera obligate de expectar durante de discargar le nove JRE.
* Illos es compatibile con le majoritate del navigatores web.
* Illos pote esser immagazinate in le cache del majoritate del navigatores web, de sorta que on lo cargara rapidemente quando on recargara le pagina web, ben que illos pote devenir remanente in le cache, causante problemas quando on publicara nove versiones.
* Illos pote haber accesso complete al machina in le qual illos es executante, si le usator lo permitte.
* Illos pote executar se a velocitates comparabile a lo de altere linguages compilate, como C++ (dependente del version del Machina Virtual Java).
* Illos pote mover le travalio del servitor al cliente, pro facer un solution web plus scalabile prendente in conto le numero de usatores o clientes.

## Disavantages
Le *applet* *Java* usualmente ha le sequente disavantages:
* Illo require le *extension* de Java, qui non es disponibile in tote le navigatores web.
* Illo non pote initiar le execution ante que le Machina Virtual Java sia in functionamento, e isto pote prender tempore le prime vice que un *applet* se executa.
* Si illo non es signate como confidibile, illo ha un accesso limitate al systema del usator - in particular illo non ha accesso directe al disco dur del cliente o al deposito temporal in le memoria.
* Alcun organisationes solmente permitte le installation de programmatura al administratores. Como resultato, multe usatores (sin privilegios pro installar le extension in su navigator web) non pote vider le *applets*.
* Un *applet* poterea requirer un version specific del JRE.
* Illo pote haber vulnerabilitates qui permitte executar codice maliciose.

## Differentias inter un application autonome e un ''applet''
Il existe differentias inter un programma autonome e un *applet*:
* Restrictiones de securitate: le *applets* es considerate *codice de pauc confidentia* (al exception que illos porta un signatura digital) durante que illos es usate in commun per tote le usatores de Internet. Per exemplo, on non permitte le accesso al archivos local ni connecter se a un servitor distincte al qual le *applet*es allogiate.
* Un *applet* necessita un navigator web pro esser visualisate, o un visor de *applets* como *appletviewer*.
* Un *applet* non ha un methodo principal.

## Creation e execution de un ''applet''
### Crear un ''applet''
Pro crear un *applet* on necessita scriber un clave del classe Applet del pacchetto `java.applet.*`;


```java
import java.applet.*;

public class MiApplet extends Applet
{
	//Corpore del ''applet''.
}
```


Le codice anterior declara un nove classe MiApplet qui heredita tote le capacitates del classe Applet de Java. Le resultato es un archivo MiApplet.java.

Un vice le classe, qui compone le *applet*, es create, on scribe le resto del codice e postea on lo compila, obteniente le archivo MiApplet.class. Pro poter crear le *applet* on necessita de compilar le codice Java.


```java
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.text.DateFormat;
 
public class MiApplet extends Applet implements Runnable
{
	private Thread filo = null;
	private Font fonte;
	private String horaActual = "00:00:00";
 
	public void init()
	{  
		fonte = new Font("Verdana", Font.BOLD, 24);
	}
    
	public void start()
	{
		if (filo == null)
		{
			filo = new Thread(this, "Horologio");
			filo.start();
		}
	}  

	public void run()
	{
		Thread filoActual = Thread.currentThread();
		while (filo == filoActual)
		{
			//obtener le hora actual
			Calendar cal = Calendar.getInstance();
			Date hora = cal.getTime();
			DateFormat df = DateFormat.getTimeInstance();
			horaActual = df.format(hora);
			repaint();
			try
			{
				Thread.sleep(1000);
			}
			catch (InterruptedException e){}
		}
	}  

	public void paint(Graphics g)
	{   
		//Delinear un rectangulo circa le container
		g.draw3DRect(1, 1, getSize().width-3, getSize().height-3, false);
		//Establir le Fonte
		g.setFont(fonte);
		//monstrar le Hora
		g.drawString(horaActual,14,40);
	}   

	public void stop()
	{   
		filo = null;
	}   
}
```


Si on usa le bibliotheca graphic Swing, on pote usar le classe JApplet de *javax.swing* in loco de Applet:


```java
import javax.swing.*;

public class MiApplet extends JApplet
{
	//Corpore del ''applet''.
}
```


### Execution
Pro insertar le *applet* in un pagina web, on usa le structura sequente:
LE NAVIGATORES WEB ACTUAL JAM NON PERMITTE EXECUTAR APPLETS

```text
<etiquetta parametro = "valor"></etiquetta>
```


#### Etiquetta <applet>
Sequente le structura anterior, un exemplo de codice pro executar le *applet* esserea:


```html4strict
<applet code="MiApplet.class" width="370" height="270"></applet>
```


On pote usar le attributos sequente:

Intra le etiquetta `<applet>` il pote apparer le etiquetta `<param>` qui contine pares clave/valor, qui es legite per le programma Java, tante vices como on vole.

#### Etiquetta <object>
A partir del version 4.0 de HTML il se es considerate obsolete le uso del etiquetta `<applet>`, essente reimplaciate per `<object>`.

Iste etiquetta es compatibile con le navigatores web Microsoft Internet Explorer, Netscape 6 (e versiones superior) e Mozilla Firefox.

Illo possede multe del attributos de `<applet>`, essente le unic pro iste etiquetta:

## Cyclo de vita
Quando un applet se initia, le methodos sequente se appella in iste ordine:

# `init`: illo contine usualmente instructiones pro initialisar le *applet*.
# `start`: como `init`, illo se usa usualmente pro initialisar, sed con le differentia que iste methodo anque se appella quando un *applet* se reinitia.
# `paint`: illo se incarga de monstrar le contento del *applet*. Illo se executa cata vice que on debe redesignar.

Pro terminar o pausar le execution le methodos sequente se appella:
* `stop`: illo suspende le execution del programma. Illo se appella quando le *applet* deveni temporarimente invisibile.
* `destroy`: quando on non necessita plus le *applet*. On lo usa pro liberar ressourses.

## Vide etiam
* ActiveX

## Referentias


## Bibliographia
* 

## Ligamines externe
*  Sito official de Oracle