Programación en castellano
-Tutoriales

Escribir Applets


Enviar Mensajes a Otros Applets

Los applets pueden encontrar otros applets y enviarles mensajes, con las siguientes restricciones de seguridad:

  • Muchos navegadores requieren que los applets sean originarios desde el mismo servidor.
  • Muchos navegadores además requieren que los applets procedan del mismo directorio del servidor (el mismo code base).
  • El API Java requiere que los applets se estén ejecutando en la misma página, en la misma ventana del navegador.
Nota:

Algunos navegadores permiten a los applets invocar métodos de otros applets -- incluso de applets en diferentes páginas del mismo navegador -- siempre que todos los applets tengan el mismo code base. Este método de comunicación entre applets no está soportado por el API Java, y posiblemente no será soportado por todos los navegadores.

Un applet puede encontrar otro applet buscándolo por su nombre (usando el método AppletContext getApplet) o buscando todos los applets que hay en una página (usando el método AppletContext getApplets). Ambos métodos, si tienen éxito le dan al llamador uno o más objetos Applet. Una vez que el llamador encuentra un objeto Applet, el llamador puede invocar los métodos del objeto.

. Encontrar un Applet por su Nombre: El Método getApplet

El método getApplet busca a través de todos los applets de la página actual para ver si uno de ellos tiene el nombre especificado. Si es así, getApplet devuelve el objeto Applet del Applet.

Por defecto, un applet no tiene nombre. Para que un applet tenga nombre, se debe especificar en el código HTML que añade el applet a la página. Podemos especificar el nombre de una applet de dos formas:

  • Especificando el atributo NAME dentro de la etiqueta <APPLET>.

    Por ejemplo:

    <APPLET CODEBASE=example/ CODE=Sender.class
        WIDTH=450
        HEIGHT=200
        NAME="buddy">
    . . .
    </applet>
    
  • Especificando un parámetro NAME con una etiqueta <PARAM> .

    Por ejemplo:

    <APPLET CODEBASE=example/ CODE=Receiver.class
        WIDTH=450
        HEIGHT=35>
    <PARAM NAME="name" value="old pal">
    . . .
    </applet>
    
Nota de Navegador:

Aunque al menos un navegador compatible Java concede una búsqueda sensible a las maýusculas, el comportamiento esperado para el método getApplet es realizar un búsqueda no sensible a las mayúsculas. Por ejemplo, getApplet("old pal") y getApplet("OLD PAL") deberían encontrar un applet llamado "Old Pal".

Pulsa sobre la imagen del applet para ver el ejemplo de búsqueda por nonbre en acción:

El primero, el emisor, busca al segundo, el receptor. Cuando el emisor encuentra al receptor, le envía un mensaje llamando a uno de sus métodos (pasándo el nombre del emisor como argumento) El receptor reacciona a esta llamada a método cambiando el string más la izquierda a "Received message from sender-name!".

Nota:

Como algunos viejos navegadores no soportan 1.1, los applets del ejemplo son versiones 1.0. Aquí están los enlaces al código 1.0 para las clases Sender y el Receiver.

Para ejecutar las versiones 1.1 de los applets puedes ir a la página example-1dot1/iac.html.

Prueba esto:

Pulsa sobre el botón Send message del applet de la parte superior (el Sender). En su ventana aparecerá alguna información de estado y el Receiver confirmará (con su propia cadena de estado) que ha recibido el mensaje. Después de haber leído la cadena de estado del Receiver, pulsa el botón Clear para resetear el receptor. En el Campo de texto llamado "Receiver name:," del Sender, teclea buddy y pulsa Return. Como "buddy" es el nombre del propio Sender, éste encontrará un applet llamado buddy pero no querrá enviarle un mensaje porque no es un ejemplar de Receiver.

Aquí está el programa completo del Sender. El código usado para buscar y comunicarse con el Receiver se lista abajo. El código que podemos usar sin modificar en nuestros propios applets está en negrita.

Applet receiver = null;
String receiverName = nameField.getText(); //Get name to search for.
receiver = getAppletContext().getApplet(receiverName);

El Sender se asegura de que ha encontrado un Receiver y que es un ejemplar de la clase correcta (Receiver). Si todo va bien, el Sender envía un mensaje al Receiver. (Aquí está el Programa Receiver.)

if (receiver != null) {
    //Use the instanceof operator to make sure the applet
    //we found is a Receiver object.
    if (!(receiver instanceof Receiver)) {
        status.appendText("Found applet named "
                          + receiverName + ", "
                          + "but it's not a Receiver object.\n");
    } else {
        status.appendText("Found applet named "
                          + receiverName + ".\n"
                          + "  Sending message to it.\n");
        //Cast the receiver to be a Receiver object
        //(instead of just an Applet object) so that the
        //compiler will let us call a Receiver method.
        ((Receiver)receiver).processRequestFrom(myName);
    }
} . . .

Desde el punto de vista de un applet, su nombre se almacena en un parámetro llamado NAME. Puede obtener el valor del parámetro usando el método Applet getParameter. Por ejemplo, Sender obtiene su propio nombre con el siguiente código:

myName = getParameter("NAME");

Para más información sobre como usar getParameter, puedes ver la página Escribir Código para Soportar Parámetros.

Los applets de esta página realizan comunicación en un sentido -- desde el emisor al receptor. Si queremos que el receptor pueda enviar mensajes al emisor, sólo tenemos que hacer que el emisor le de una referencia de sí mismo (this) al receptor. Por ejemplo:

((Receiver)receiver).startCommunicating(this);

. Encontrar Todos los Applets de una Página: El Método getApplets

El método getApplets devuelve una lista (una Enumeration, para ser precesisos) con todos los applets de la página. Por razones de seguridad, muchos navegadores y visualizadores de applets implementan getApplets para que sólo devuelva aquellos applets originarios del mismo host del applet que llamó a getApplets. Aquí tenemos un applet que simplemente lista los applets que puede encontrar en esta página:

Pulsa sobre la imagen para ejecutar los applets...

Nota:

Como algunos viejos navegadores no soportan 1.1, los applets de lejemplo son versiones 1.0. Aquí está el enlace al código 1.0 para la clase GetApplets y el código de la versión 1.1.

Para ejecutar las versiones 1.1 de los applets puedes ir a la página example-1dot1/iac2.html.

Abajo tenemos las partes importantes del método que llama a getApplets. (Aquí está el programa completo.)

public void printApplets() {
    //Enumeration will contain all applets on this page (including
    //this one) that we can send messages to.
    Enumeration e = getAppletContext().getApplets();
    . . .
    while (e.hasMoreElements()) {
        Applet applet = (Applet)e.nextElement();
        String info = ((Applet)applet).getAppletInfo();
        if (info != null) {
            textArea.appendText("- " + info + "\n");
        } else {
            textArea.appendText("- "
                                + applet.getClass().getName()
                                + "\n");
        } 
    }
    . . .
}
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados