Applets ! Un applet es: ! Programación de Applets ! ! Programación Orientada a Objetos Facultad de Informática ! ! ! Juan Pavón Mestras Dep. Sistemas Informáticos y Programación Universidad Complutense Madrid 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 Un applet puede ejecutarse en: ! ! un navegador: Netscape, Firefox, Explorer appletviewer (parte del JDK) <HTML> <APPLET CODE="HolaMundoApplet.class" WIDTH=300 HEIGHT=100> </APPLET> Juan Pavón Mestras </HTML> Programación para Internet con Java Facultad de Informática UCM, 2004 Cómo se ejecuta un applet Java Cómo hacer un applet Java ! Para hacer un applet Java hay que definir: 1. Intérprete HTML Una clase Java (nuestro applet) que herede de Applet • En esta clase se redefinen algunos métodos para especificar qué hace el applet 1 2. html 2 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 clases gifs Intérprete Java 3 Servidor Web Visor gif (gráficos) Navegador (cliente) Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 3 Juan Pavón Mestras 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 El applet HolaMundoApplet > edit HolaMundoApplet.java editor Define el método paint() Clases Clasesjava java (.java) (.java) > edit hola.html bytecodes (.class) Fichero Fichero HTML HTML Navegador o appletviewer > appletviewer hola.html Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 5 Applets ! Juan Pavón Mestras Facultad de Informática UCM, 2004 import importjava.applet.Applet; java.applet.Applet; import importjava.awt.Graphics; java.awt.Graphics; public publicclass classHolaMundoApplet HolaMundoApplet extends extendsApplet Applet{{ public publicvoid voidinit() init(){{ resize(150,25); resize(150,25); }} public publicvoid voidpaint paint(Graphics (Graphicsg)g) {{ g.drawString(“Hola g.drawString(“HolaMundo”, Mundo”,50,25); 50,25); }} }} Programación para Internet con Java 6 Applet mínimo Subclase de java.lang.Applet ! ! ! HolaMundoApplet.java <HTML> <HTML> <HEAD> <HEAD> <TITLE> <TITLE>Hola HolaMundo</TITLE> Mundo</TITLE> </HEAD> </HEAD> <BODY> <BODY> Saluda Saludaamigablemente: amigablemente: <APPLET <APPLET CODE=“HolaMundoApplet.class” CODE=“HolaMundoApplet.class” WIDTH=150 WIDTH=150HEIGHT=125> HEIGHT=125> </APPLET> </APPLET> </BODY> </BODY> </HTML> </HTML> editor Invoca el applet > javac HolaMundoApplet.java javac Hola.html Normalmente sin método main() Los applets se ejecutan como parte de otro programa (por ejemplo, en un navegador) public class AppletMinimo extends java.applet.Applet { // no hace nada } Un applet se programa reescribiendo alguno de los métodos de la clase Applet ! <HTML> <HEAD> <TITLE>Applet M&iacute;nimo</TITLE> </HEAD> <BODY> <APPLET CODE= "AppletMinimo.class" HEIGTH=100, WIDTH=200> </APPLET> Aqu&iacute; no pasa nada. </BODY> </HTML> al menos uno de los siguientes: • init() • start() • paint() Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 7 Juan Pavón Mestras 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 Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 9 Ciclo de vida de un applet ! ! ! ! 10 public void init() Se crea: init() Puede comenzar a ejecutarse: start() Puede pararse: stop() Puede destruirse: destroy() ! Se llama una sola vez, al crearse el applet: ! • Estos métodos definen lo que se hace cuando el applet cambia su estado de ejecución o existencia ! Programación para Internet con Java Métodos de los applets En general un applet pasa por varias fases: ! Juan Pavón Mestras Facultad de Informática UCM, 2004 ! ! No se define constructor para los applets (para eso se utiliza el método init()) 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) ! ! ! Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 11 Examinar los parámetros del applet Cargar imágenes, sonidos, etc., de la red en memoria Por defecto no hace nada Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 12 Métodos de los applets Métodos de los applets public void start() ! 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: ! ! Por defecto no hace nada Programación para Internet con Java ! 13 ! A continuación puede llamarse a start() Por defecto no hace nada Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java al descargarse el applet public void init() { estado ="Applet cargado"; repaint(); } public void start() { estado ="Empezando la ejecución"; repaint(); } public void stop() { estado ="Parando el applet"; repaint(); } matar cualquier hilo de ejecución (thread) activo cerrar conexiones a red Por defecto no hace nada Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 14 public void destroy() { estado ="Preparado para eliminarse"; repaint(); } public class Simple extends Applet { String estado; Para liberar todos los recursos asociados al applet ! parar los hilos de ejecución paralela parar la animación y la reproducción de sonidos import java.applet.Applet; import java.awt.Graphics; Se llama cuando no va a usarse más el applet: ! cuando el applet deja de ser visible (al abandonar la página) Métodos del ciclo de vida del applet public void destroy() ! ! ! Métodos de los applets ! Se llama para detener la ejecución del applet: ! crear hilos de ejecución paralela (threads) comenzar a reproducir música o imágenes Juan Pavón Mestras Facultad de Informática UCM, 2004 ! ! Se puede: ! ! public void stop() 15 Juan Pavón Mestras Facultad de Informática UCM, 2004 public void repaint() { System.out.println(estado); super.repaint(); } 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); } } Programación para Internet con Java 16 Métodos de los applets ! Métodos de los applets Métodos para pintar y tratar acciones ! ! ! public void paint(Graphics g) 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 ! ! ! 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); ! Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 17 Métodos de los applets ! En general no se reescribe ! Por defecto, limpia el rectángulo del Component y llama a paint(g): cuando hace falta cambiar el contenido gráfico del applet Por defecto, se comunica con el AWT-Updater para indicarle la necesidad de llamar a update() para este Component • Dejar que se ejecute el updater • Es posible pasar este método y usar paint() directamente • Algo bruto, no es muy recomendable Se puede modificar cuando interesa reducir el efecto de parpadeo producido al limpiar y repintar la pantalla Juan Pavón Mestras Facultad de Informática UCM, 2004 18 • No se produce update() hasta que el llamante se duerma, g.clear(); paint(g); ! Se llama: ! Prepara para pintar, y llama a paint(g) ! ! por la hebra AWT-Updater • La modificación de variables debe hacerse bajo synchronized ! Programación para Internet con Java public void repaint() Se llama para actualizar la pantalla: ! Juan Pavón Mestras Facultad de Informática UCM, 2004 Métodos de los applets public void update(Graphics g) ! Por defecto no hace nada Programación para Internet con Java 19 Juan Pavón Mestras 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= > </APPLET> ! ! ! 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” Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java ! 21 jar cf OchoReinasApplet.jar java04Tecnicas Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 22 Uso de parámetros del HTML El applet puede acceder a los parámetros con el método: ! getParameter(String) 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): ! <HTML> <HEAD> <TITLE>Applet HolaColega</TITLE> </HEAD> <BODY> <APPLET CODE=HolaColega HEIGTH=100, WIDTH=200> <PARAM NAME=“nombre” VALUE=“Juan”> Applet HolaColega </APPLET> Ejecutando HolaColega. </BODY> </HTML> Programación para Internet con Java Para crear el fichero .jar ! Uso de parámetros del HTML Juan Pavón Mestras Facultad de Informática UCM, 2004 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> Atributos obligatorios ! ! ! 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() ! ! ! 23 obtiene el URL base del applet getDocumentBase() obtiene el documento URL en el que está embebido el applet Juan Pavón Mestras 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); } } 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); } <APPLET CODE=“HolaColega.class” HEIGHT=100 WIDTH=200> <PARAM NAME=“nombre” value=“Juan”> </APPLET> Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java Ejemplo de utilización de parámetros WIDTH Y HEIGHT 25 Métodos de los applets Juan Pavón Mestras Facultad de Informática UCM, 2004 ! ! obtiene un clip audio que se puede reproducir con play() getAppletInfo() ! getImage(URL) ! ! Otros métodos getAudioClip(URL) ! ! reproduce un clip audio de la red getParameterInfo() ! ! Programación para Internet con Java 27 devuelve un array de cadenas que describen los parámetros que entiende el applet. Hay que implementarlo showStatus(String) ! Juan Pavón Mestras Facultad de Informática UCM, 2004 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 obtiene una imagen que se puede visualizar play(URL) ! 26 Métodos de los applets Otros métodos ! Programación para Internet con Java Muestra un mensaje de estado en el área reservada para ello en la ventana del navegador (por ejemplo, abajo a la izquierda) Juan Pavón Mestras Facultad de Informática UCM, 2004 Programación para Internet con Java 28