Applets Programación de Applets Programación Orientada a Objetos Facultad de Informática! Un applet es:! una pequeña aplicación! accesible en un servidor Internet! que se transporta por la red! se instala automáticamente! se ejecuta in situ como parte de un documento HTML Dep. Sistemas Informáticos y Programación Universidad Complutense Madrid! Un applet puede ejecutarse en:! un navegador: Netscape, Firefox, Explorer! appletviewer (parte del JDK) <APPLET CODE="HolaMundoApplet.class" WIDTH=300 HEIGHT=100> Facultad de Informática UCM, 2004 Programación para Internet con Java 2 Cómo se ejecuta un applet Java Cómo hacer un applet Java Intérprete HTML 1 2 html clases! Para hacer un applet Java hay que definir: 1. Una clase Java (nuestro applet) que herede de Applet En esta clase se redefinen algunos métodos para especificar qué hace el applet 2. Una página HTML desde la que se llame al applet De la misma manera que una página HTML puede incluir otros objetos (gráficos, etc.), también applets, con la etiqueta APPLET gifs Intérprete Java 3 Servidor Web Visor gif (gráficos) Navegador (cliente) Facultad de Informática UCM, 2004 Programación para Internet con Java 3 Facultad de Informática UCM, 2004 Programación para Internet con Java 4
Cómo hacer un applet Java Cómo hacer un applet Java editor Clases Clases java java (.java) (.java) javac bytecodes (.class) > edit HolaMundoApplet.java Define el método paint() > edit hola.html Invoca el applet editor Fichero HTML HTML > javac HolaMundoApplet.java Fichero > appletviewer hola.html Navegador o appletviewer Facultad de Informática UCM, 2004 Programación para Internet con Java 5 Hola.html <HEAD> <TITLE> Hola Hola Mundo</TITLE> </HEAD> <BODY> Saluda Saluda amigablemente: <APPLET CODE= HolaMundoApplet.class WIDTH=150 HEIGHT=125> </BODY> El applet HolaMundoApplet HolaMundoApplet.java import importjava.applet.applet; import importjava.awt.graphics; public publicclass classholamundoapplet extends extendsapplet { public publicvoid voidinit() init() { resize(150,25); public publicvoid voidpaint (Graphics g) g) { g.drawstring( Hola Mundo, 50,25); 50,25); Facultad de Informática UCM, 2004 Programación para Internet con Java 6 Applets! Subclase de java.lang.applet! Normalmente sin método main()! Los applets se ejecutan como parte de otro programa (por ejemplo, en un navegador) Applet mínimo public class AppletMinimo extends java.applet.applet { // no hace nada! Un applet se programa reescribiendo alguno de los métodos de la clase Applet! al menos uno de los siguientes: init() start() paint() Facultad de Informática UCM, 2004 Programación para Internet con Java 7 <HEAD> <TITLE>Applet Mínimo</TITLE> </HEAD> <BODY> <APPLET CODE= "AppletMinimo.class" HEIGTH=100, WIDTH=200> Aquí no pasa nada. </BODY> Facultad de Informática UCM, 2004 Programación para Internet con Java 8
Arquitectura de appletviewer Restricciones de los applets! Por razones de seguridad:! No pueden leer o escribir en el sistema de archivos del cliente! No pueden comunicarse con otro servidor de red distinto al de origen del applet! No pueden ejecutar programas en el sistema cliente! No pueden cargar programas nativos de la plataforma local Algunos navegadores permiten configurar el nivel de seguridad A partir de JDK 1.1 se ofrece soporte para firma digital Facultad de Informática UCM, 2004 Programación para Internet con Java 9 Facultad de Informática UCM, 2004 Programación para Internet con Java 10 Ciclo de vida de un applet! En general un applet pasa por varias fases:! Se crea: init()! Puede comenzar a ejecutarse: start()! Puede pararse: stop()! Puede destruirse: destroy() Estos métodos definen lo que se hace cuando el applet cambia su estado de ejecución o existencia! No se define constructor para los applets (para eso se utiliza el método init()) public void init()! Se llama una sola vez, al crearse el applet:! Al mostrarse la página por primera vez (entonces se carga el applet)! O al recargarse la página! Sirve para:! Inicializar variables globales al applet Por ejemplo, el tamaño del applet aunque tiene prioridad el especificado en el HTML, y algunos navegadores ignoran la operación resize(anchura, altura)! Examinar los parámetros del applet! Cargar imágenes, sonidos, etc., de la red en memoria Facultad de Informática UCM, 2004 Programación para Internet con Java 11 Facultad de Informática UCM, 2004 Programación para Internet con Java 12
public void start() public void stop()! Se llama cada vez que se visita el applet, para activarlo:! Después de init()! O al revisitar la página (después de haber llamado a stop())! Se puede:! crear hilos de ejecución paralela (threads)! comenzar a reproducir música o imágenes! Se llama para detener la ejecución del applet:! cuando el applet deja de ser visible (al abandonar la página)! Se puede:! parar los hilos de ejecución paralela! parar la animación y la reproducción de sonidos! A continuación puede llamarse a start() Facultad de Informática UCM, 2004 Programación para Internet con Java 13 Facultad de Informática UCM, 2004 Programación para Internet con Java 14 Métodos del ciclo de vida del applet public void destroy()! Se llama cuando no va a usarse más el applet:! al descargarse el applet! Para liberar todos los recursos asociados al applet! matar cualquier hilo de ejecución (thread) activo! cerrar conexiones a red import java.applet.applet; import java.awt.graphics; public class Simple extends Applet { String estado; public void init() { estado ="Applet cargado"; public void start() { estado ="Empezando la ejecución"; public void stop() { estado ="Parando el applet"; public void destroy() { estado ="Preparado para eliminarse"; public void repaint() { System.out.println(estado); super. public void paint(graphics g) { //Dibuja un rectángulo alrededor del applet g.drawrect(0, 0, getsize().width - 1, getsize().height - 1); //Dibuja el estado g.drawstring(estado, 5, 15); Facultad de Informática UCM, 2004 Programación para Internet con Java 15 Facultad de Informática UCM, 2004 Programación para Internet con Java 16
! Métodos para pintar y tratar acciones! Un applet normalmente pinta algo en la pantalla. Esto se define con el método paint()! El método repaint() permite indicarle al applet que tiene que volver a pintarse (por ejemplo porque algo ha cambiado)! Para tratar acciones del usuario (con el ratón o el teclado): ver el capítulo sobre interfaces de usuario public void paint(graphics g)! El área gráfica g representa la ventana del applet en la página web! paint() es un método de la clase Component, heredado por Applet! Se llama para refrescar el área de dibujo del applet:! Después de la inicialización, si la ventana se ha escondido y luego vuelve al frente, o si se mueve la ventana del navegador! Cuando un hilo de ejecución llama a repaint() La modificación de variables debe hacerse bajo synchronized! Indica qué hace el applet! Dibuja en el área gráfica g g.drawstring( Hola Mundo, 25, 25); Facultad de Informática UCM, 2004 Programación para Internet con Java 17 Facultad de Informática UCM, 2004 Programación para Internet con Java 18 public void update(graphics g) public void repaint()! Se llama para actualizar la pantalla:! por la hebra AWT-Updater La modificación de variables debe hacerse bajo synchronized! Prepara para pintar, y llama a paint(g)! Por defecto, limpia el rectángulo del Component y llama a paint(g): g.clear(); paint(g);! Se puede modificar cuando interesa reducir el efecto de parpadeo producido al limpiar y repintar la pantalla! Se llama:! cuando hace falta cambiar el contenido gráfico del applet! En general no se reescribe! Por defecto, se comunica con el AWT-Updater para indicarle la necesidad de llamar a update() para este Component No se produce update() hasta que el llamante se duerma, Dejar que se ejecute el updater Es posible pasar este método y usar paint() directamente Algo bruto, no es muy recomendable Facultad de Informática UCM, 2004 Programación para Internet con Java 19 Facultad de Informática UCM, 2004 Programación para Internet con Java 20
La etiqueta APPLET en HTML La etiqueta APPLET en HTML <APPLET CODE= WIDTH= HEIGTH= [CODEBASE=] [ALT=] [NAME=] [ALIGN=] [VSPACE=] [HSPACE=]> <PARAM NAME= VALUE= >! Atributos obligatorios! CODE = nombreclase.class! WIDTH Anchura inicial! HEIGHT Altura inicial! Atributos opcionales! CODEBASE = URL base del Applet Se usa cuando el código del applet no está en el mismo directorio que el html! NAME = Nombre del ejemplar Se puede hacer start() de un applet guardado en forma serializada Puede servir para comunicar applets de una misma página! ALIGN = LEFT RIGTH TOP TEXTTOP MIDDLE BOTTOM! ARCHIVE = archivo.zip! ARCHIVE = archivo.jar! Ejemplo: <applet code="java04tecnicas.ochoreinasapplet.class" archive="ochoreinasapplet.jar" width=500 height=500 > Para ver el applet hace falta un navegador habilitado para Java </applet>! Para crear el fichero.jar! jar cf OchoReinasApplet.jar java04tecnicas Facultad de Informática UCM, 2004 Programación para Internet con Java 21 Facultad de Informática UCM, 2004 Programación para Internet con Java 22 Uso de parámetros del HTML Uso de parámetros del HTML En HTML los parámetros para el applet se declaran con la etiqueta PARAM, y a cada parámetro se le da un nombre (NAME) y un valor (VALUE): <HEAD> <TITLE>Applet HolaColega</TITLE> </HEAD> <BODY> <APPLET CODE=HolaColega HEIGTH=100, WIDTH=200> <PARAM NAME= nombre VALUE= Juan > Applet HolaColega Ejecutando HolaColega. </BODY> El applet puede acceder a los parámetros con el método:! getparameter(string)! permite leer un parámetro del applet especificado en el HTML con el NAME=String (esto es, se devuelve lo que se indica en VALUE=xxx) Otros métodos útiles son:! getcodebase()! obtiene el URL base del applet! getdocumentbase()! obtiene el documento URL en el que está embebido el applet Facultad de Informática UCM, 2004 Programación para Internet con Java 23 Facultad de Informática UCM, 2004 Programación para Internet con Java 24
Uso de parámetros del HTML Uso de parámetros del HTML import java.awt.graphics; public class HolaColega extends java.applet.applet { String colega; public void init() { colega = getparameter( nombre ); if ( colega == null ) colega = colega anónimo ; public void paint(graphics g) { g.drawstring( Hola + colega, 10, 0); <APPLET CODE= HolaColega.class HEIGHT=100 WIDTH=200> <PARAM NAME= nombre value= Juan > Facultad de Informática UCM, 2004 Programación para Internet con Java 25! Ejemplo de utilización de parámetros WIDTH Y HEIGHT public void init(){ int ancho=400; //valores por defecto int alto=300; try{ ancho = Integer.parseInt(this.getParameter("WIDTH")); alto = Integer.parseInt(this.getParameter("HEIGHT")); catch(numberformatexception ex){ System.out.println( "Error en los parámetros WIDTH y HEIGHT"); this.setsize(ancho,alto); Facultad de Informática UCM, 2004 Programación para Internet con Java 26 Otros métodos! getaudioclip(url)! obtiene un clip audio que se puede reproducir con play()! getimage(url)! obtiene una imagen que se puede visualizar! play(url)! reproduce un clip audio de la red Otros métodos! getappletinfo()! devuelve una cadena con información sobre el autor, la versión y el copyright del applet. Hay que implementarlo. Es útil por ejemplo para explicar lo que hace el applet o poner el nombre de su autor! getparameterinfo()! devuelve un array de cadenas que describen los parámetros que entiende el applet. Hay que implementarlo! showstatus(string)! Muestra un mensaje de estado en el área reservada para ello en la ventana del navegador (por ejemplo, abajo a la izquierda) Facultad de Informática UCM, 2004 Programación para Internet con Java 27 Facultad de Informática UCM, 2004 Programación para Internet con Java 28