Applets
Jesús Arias Fisteus
Curso 2007/2008
Applets
- Aplicaciones gráficas Java que se ejecutan en el navegador Web.
- Un applet es una clase que hereda de
java.applet.Applet.
- La clase Applet hereda de Panel.
- Los applets que usen componentes Swing
deben heredar de javax.swing.JApplet,
que es subclase de Applet.
La clase JApplet
- Es un contenedor de alto nivel de Swing.
- Contiene un JRootPane accesible con getContentPane():
- Los componentes se añaden al JRootPane.
- El layout se establece en el JRootPane:
- El layout por defecto es BorderLayout.
Ciclo de vida de un applet
- El navegador gestiona el ciclo de vida del applet.
- Un applet no tiene médoto main.
- El navegador notifica al applet de los cambios en su ciclo
de vida mediante cuatro métodos:
- init: cuando se carga el applet por primera
vez; usado para inicializaciones.
- start: tras invocar a init y cada vez que
el usuario vuelva a la página del applet.
- stop: cuando el usuario vaya a otra página.
- destroy: cuando se cierra el navegador.
Gestión de hilos en applets Swing
- El navegador invoca a los métodos
init, start, stop y destroy
desde fuera del hilo de atención
a eventos, y por tanto es necesario:
public void init() {
//Execute a job on the event-dispatching thread:
//creating this applet's GUI.
try {
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
createGUI();
}
});
} catch (Exception e) {
System.err.println("createGUI didn't successfully complete");
}
}
Carga de un applet desde (X)HTML
- Un applet se carga en el navegador a través
de un documento HTML o XHTML:
- En HTML se carga con el elemento applet,
object o embed (se recomienda el uso de
applet).
- En XHTML se carga con el elemento object, aunque
puede dar problemas de compatibilidad con algunos navegadores.
El elemento applet (HTML)
- Uso obsoleto.
- Atributos:
- code: clase principal del applet.
- width, height: dimensiones del applet.
- archive: opcionalmente, si la(s) clase(s) necesarias
se empaquetan en uno o más ficheros JAR.
<applet code=PrimerApplet.class width="200" height="200">
<param name="snd" value="Hello.au|Welcome.au">
Presentación alternativa si el navegador no ejecuta
el <i>applet</i>.
</applet>
El elemento object (HTML / XHTML)
- Atributos:
- codetype: tipo de objeto. Debe ser
``application/java''.
- classid: nombre de la clase precedido de
``java:''.
- width, height y archive.
<object codetype="application/x-java-applet"
classid="java:PrimerApplet.class"
width="200" height="200">
<param name="snd" value="Hello.au|Welcome.au" />
Presentación alternativa si el navegador no ejecuta
el <i>applet</i>.
</object>
Compatibilidad con Explorer en XHTML
<!-- véase http://ww2.cs.fsu.edu/~steele/XHTML/appletObject.html -->
<!--[if !IE]>-->
<object classid="java:HolaJava.class"
type="application/x-java-applet"
height="300" width="450" >
<!--<![endif]-->
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
height="300" width="450" >
<param name="code" value="HolaJava" />
<param name="archive" value="HolaJava.class" />
</object>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
APIs específicas para applets
- Mostrar un mensaje en la barra de estado del navegador
(método showStatus()).
- Cargar documentos en el navegador (método
showDocument()).
- Invocar métodos públicos de otros applets de la misma
página (método getAppletContext().getApplet()).
- Reproducir sonidos (métodos getAudioClip() y
play()).
- Parametrización desde el documento (X)HTML
(método getParameter()).
Restricciones de seguridad
- No puede cargar bibliotecas ni código nativo.
- No puede escribir ni leer ficheros en la máquina cliente.
- Sólo puede comunicarse por red con la máquina de la cual procede.
- No puede lanzar la ejecución de otros
programas en la máquina cliente.
- No puede leer algunas propiedades del sistema.
- Las ventanas que abre indican claramente que proceden
de un applet.