mozilla
Los resultados de tu búsqueda

    Comunicación de JavaScript con Java

    Comunicación JavaScript con Java

    Cuando se refiere a un paquete o clase Java, o trabaja con objetos o arreglos Java, puede usar uno de los objetos especiales LiveConnect. Todo JavaScript accede a Java tomando lugar con esos objetos, que son resumidos en la siguiente tabla.

    Objeto Descripción
    JavaArray un envoltorio de arreglos Java, accedido desde dentro del código JavaScript.
    JavaClass Una referencia a una clase Java.
    JavaObject Un objeto envoltorio Java, accedido desde dentro del código JavaScript.
    JavaPackage Una referencia JavaScript a un paquete Java.

    Tabla 9.1 Los Objetos LiveConnect


    Nota: Debido a que Java es un lenguaje de tipos fuertes y JavaScript de tipos débiles, la máquina de tiempo de ejecución de JavaScript convierte los valores de los argumentos en tipos de datos apropiados de otro lenguaje cuando utiliza LiveConnect. Véase Conversión de Tipos de datos para una completa información.

    De cualquier forma, la existencia de los objetos LiveConnect es transparente, debido a que ineractúa con Java en un manera intuititva. Por ejemplo, puede crear un objeto cadena de Java y le asigna a la variable JavaScript miCadena mediante el uso del operador new con el constructor Java, como sigue:

    var miCadena = new java.lang.String("Hola mundo")
    

    En el ejemplo previo, la variable miCadena es un objeto JavaObject porque este contiene una instancia del objeto Java String. Así un JavaObject, miCadena tiene acceso a los métodos públicos de la instancia de java.lang.String y su superclase, java.lang.Object. Estos métodos Java están disponibles en JavaScript como métodos de JavaObject y puede invocarlos como sigue:

    miCadena.length() // retorna 10
    

    El objeto Paquete

    En una clase Java que no es parte de java, los paquetes sun o netscape pueden ser accedidos con el objeto paquetes Packages. Por ejemplo, supóngase que la corporación Redwood utiliza un paquete Java llamado redwood para contener varias clases Java que implementa. Para crear una instancia de la clase HelloWorld en redwood, accede al constructor de la clase como sigue:

    var red = new Packages.redwood.HelloWorld()
    

    También puede acceder a las clases en el paquete por defecto (esto es, las clases no nombran explícitamente un paquete). Por ejemplo, si la clase HelloWorld class está directamente en CLASSPATH y no en un paquete, puede accederla como sigue:

    var red = new Packages.HelloWorld()
    

    Los objetos LiveConnect java, sun y netscape proveen atajos para los paquetes Java comunmente utilizados. Por ejemplo, puede utilizar lo siguiente:

    var miCadena = new java.lang.String("Hola Mundo")
    

    en vez de la versión larga:

    var miCadena = new Packages.java.lang.String("Hola Mundo")
    

     

    Trabajando con arreglos Java

    Cuando cualquier método Java crea un arreglo y se refiere a ese arreglo desde JavaScript, está trabajando con un JavaArray. Por ejemplo, el siguiente código crea un JavaArray x con diez elementos del tipo entero:

    x = java.lang.reflect.Array.newInstance(java.lang.Integer, 10)
    

    Así como el objeto JavaScript Array, JavaArray posee la propiedad length la cual retorna el número de elementos en un arreglo. A diferencia de Array.length, JavaArray.length es una propiedad sólo de lectura, debido a que el número de elementos en un arreglo Java es fijo en tiempo de creación.

    Referencias de Paquetes y Clases

    Las referencias simples a paquetes y clases Java desde JavaScript crean los objetos JavaPackage y JavaClass. En el ejemplo anterior acerca de la corporación Redwood, por ejemplo, la referencia Packages.redwood es un objeto JavaPackage. Similarmente, una referencia tal como java.lang.String es un objeto JavaClass.

    La mayoría del tiempo, no tiene que precouparse acerca de los objetos JavaPackage y JavaClass —tan sólo tiene que trabajar con los paquetes y las clases y LiveConnect crea estos objetos transparentemente.

    En JavaScript 1.3 y versiones anteriores, los objetos JavaClass no son convertidos automáticamente a instancias de java.lang.Class cuando los pasa como parámetros a los métodos Java—deberá crear un envoltorio alrededor de una instancia de java.lang.Class. En el siguiente ejemplo, el método forName crea un objeto envoltorio theClass, el cual es luego pasado al método newInstance para crear un arreglo.

    // JavaScript 1.3
    theClass = java.lang.Class.forName("java.lang.String")
    theArray = java.lang.reflect.Array.newInstance(theClass, 5)
    

    En JavaScript 1.4 y posteriores, puede pasar un objeto JavaClass directamente a un método, como se muestra en el ejemplo siguiente:

    // JavaScript 1.4
    theArray = java.lang.reflect.Array.newInstance(java.lang.String, 5)
    

    Argumentos de Tipo char

    En JavaScript 1.4 y posteriores, puede pasar una cadena de un caracter al método Java el cual requiere un argumento del tipo char. Por ejemplo, puede pasar la cadena "H" al constructor Character como sigue:

    c = new java.lang.Character("H")
    

    En JavaScript 1.3 y versiones anteriores, debe pasar tales métodos un enteror el cual corresponde al valor Unicode value del caracterr. Por ejemplo, el siguiente código también asigna el valor de "H" a la variable c:

    c = new java.lang.Character(72)
    

    Manejo de Excepciones Java en JavaScript

    Cuanda un código Java falla en tiempo de ejecución, este lanza una excepción. Si su código JavaScript accede a un miebro de dato Java o un método y falla, la excepción Java es pasada a JavaScript para su manipulación. Comenzando con JavaScript 1.4, puede atrapar esta excepción en una sentencia try...catch.

    Por ejemplo, supóngase que está utilizando el método Java forName para asignar el nombre de una clase Java a una variable llamada theClass. El método forName lanza una excepción si el valor que usted pasa no se evalúa para un nombre de una clase Java. Coloque la sentencia de asignación forName dentro de un bloque try para manipular la excepción , como sigue:

    function getClass(javaClassName) {
       try {
          var theClass = java.lang.Class.forName(javaClassName);
       } catch (e) {
          return ("The Java exception is " + e);
       }
       return theClass
    }
    

    En este ejemplo, si javaClassName evalúa a un nombre legal de clase, tal como "java.lang.String", la asignación sucede. Si javaClassName evalúa a un nombre inválido de clase, tal como "String", la función getClass atrapa la excepción y retorna algo similar a lo siguiente:

    La excepción Java es java.lang.ClassNotFoundException: String
    

    Para manejadores especializado para un tipo de excepción, utilice el operador instanceof:

    try {
      // ...
    } catch (e) {
      if (e instanceof java.io.FileNotFound) {
         // handling for FileNotFound
      } else {
        throw e;
      }
    }
    

    Véase Sentencias para la manipulación de Excepciones para mayor información acerca de excepciones JavaScript.

    Etiquetas y colaboradores del documento

    Contributors to this page: Sheppy, Mgjbot, [TOTO], Skatetuco, DSN XP, teoli
    Última actualización por: teoli,