Applets que se comunican (estando en la misma página)


Introducción

Aspectos de interés en este ejemplo:

Puede descargar el código fuente: receptor.java   y transmisor.java

Applets que se comunican

Tenemos dos applets:


	public class receptor extends Applet {
		....
	}

	public class transmisor extends Applet {
		....
	}

El applet "transmisor" envía un mensaje al applet "receptor" (¡y sin tener que manejar explicitamente shockets!). Todo el meollo se encuentra en manejar el Contexto del applet. Código fuente:


	String mensaje = texto.getText();
	receptor receptor = (receptor) getAppletContext().getApplet( "applet_receptor" );
	receptor.recibir_mensaje( mensaje );

Explicándolo paso a paso:

  1. Desde la clase transmisor obtenemos el contexto del receptor. ¿Cómo? por medio de una llamada a getAppletContext() obtenemos un objeto de la clase AppletContext

  2. Desde el objeto de AppletContext obtenemos una referencia al applet receptor por medio de una llamada a getApplet( String nombre_HTML_del_Applet ). No nos confundamos, la cadena que hay que poner no es el nombre Java de la clase receptora, es decir, "receptor", sino el nombre que se le ha dado en la página HTML, es decir, "applet_receptor". Véase el contenido de la etiqueta APPLET en la página HTML:
    
    		<applet
    			codebase = "."
    			code     = "awt02_transmitir.receptor.class"
    			name     = "applet_receptor"
    			....
    		> </applet>
    	

Para más información puedes ver Lemay y Perkins (1996, pag. 298-299).

Cargar y mostrar una imagen

Como cargar una imagen:


	URL url = new URL( getCodeBase(), "awt02_transmitir/imagen/buho.GIF" );
	Image buho = Toolkit.getDefaultToolkit().getImage( url );

Este constructor de URL nos exige dos cosas:

  1. Una URL de la ruta de contexto o base, para lo cual usamos getCodeBase(), por medio de la cual obtenemos la URL del directorio indicado en la página HTML con el parámetro CODEBASE. Puesto que hemos puesto CODEBASE = ".", hace referencia al directorio de la página. A continuación podemos ver dos ejemplos de getCodeBase(), en el primero el applet se encuentra en local (protocolo "file") y en el segundo se encuentra en un servidor web remoto (protocolo http):
  2. 
    		file:/C:/DOC/Java/awt02_transmitir/class/
    		http://personal.telefonica.terra.es/web/rlagob/java/awt02_transmitir/class/
    	
  3. Necesitamos una cadena (String) con la ruta relativa del archivo GIF. Lo que hace el constructor de URL es unir la ruta de contexto y la ruta relativa.

¿Por qué hacerlo así? Sólo tenemos que especificar una ruta relativa (en nuestro ejemplo es "awt02_transmitir/imagen/buho.GIF").

Al applet muestra otra página en su navegador

El applet hace que el navegador salte a otra página de forma muy sencilla, primero obtenemos la URL que queremos abrir y después, por medio de un AppletContext, mostramos la URL con showDocument( URL ):


	URL url = new URL( "http://www.elmundo.es" );     // Crea URL
	getAppletContext().showDocument( url );           // Abre URL