Programación de clientes ActiveX, clases JClassProxy y JObjectProxy
La mayor parte de las tareas para acceder a las clases y objetos Java™ se manejan con los objetos JClassProxy y JObjectProxy.
JClassFactory es el objeto que se utiliza para acceder a la mayoría de características de la máquina virtual Java (JVM). Este objeto maneja la inicialización de la JVM, accede a las clases y crea instancias de clases (objetos). Utilice los objetos JClassProxy y JObjectProxy para acceder a la mayoría de las clases y objetos Java:
- XJBInit(String astrJavaParameterArray())
Inicializa el entorno JVM mediante una matriz de series que representan los parámetros de línea de mandato que normalmente envía al archivo java.exe.
Si tiene parámetros no válidos en la matriz de series XJBInit(), se muestra el siguiente error:Error: 0x6002 "XJBJNI::Init() No se ha podido crear VM" al llamar a XJBInit()
Si tiene activado el registro de C++, el archivo de registro de actividad mostrará el parámetro no válido. - JClassProxy FindClass(String strClassName)
Utiliza el cargador de clases de la hebra actual para cargar el nombre de clase plenamente cualificado que se ha especificado y devuelve un objeto JClassProxy que representa al objeto de clase Java.
- JObjectProxy NewInstance() Crea una instancia de clase para el objeto JClassProxy especificado utilizando los parámetros proporcionados para llamar al constructor de clase. Para obtener más información acerca de cómo utilizar el método JMethodArgs, consulte el puente de ActiveX a EJB, llamando a los métodos Java.
JObjectProxy NewInstance(JClassFactory obj, Variant vArg1, Variant vArg2, Variant vArg3, ...) JObjectProxy NewInstance(JClassFactory obj, JMethodArgs args)
- JMethodArgs GetArgsContainer()
Devuelve un objeto JMethodArgs (instancia de clase).
Puede crear un objeto JClassProxy a partir del método JClassFactory.FindClass() y a partir de cualquier llamada a método Java que normalmente devuelva un objeto de clase Java. Puede utilizar este objeto si tiene que redirigir el acceso al objeto de clase Java. Se puede acceder a todos los métodos estáticos de la clase y a los campos del mismo que a los métodos java.lang.Class. Si hay un conflicto entre los nombres de los métodos estáticos de la clase de usuario reflejada y los de java.lang.Class (por ejemplo, getName()), los métodos estáticos reflejados se ejecutarán en primer lugar.
Por ejemplo, el siguiente es un método estático llamado getName(). El objeto java.lang.Class también tiene un método llamado getName():- En Java:
class foo{ foo(){}; public static String getName(){return "abcdef";} public static String getName2(){return "ghijkl";} public String toString2(){return "xyz";} }
- En Visual Basic:
... Dim clsFoo as Object set clsFoo = oXJB.FindClass("foo") clsFoo.getName() ' Devuelve "abcdef" de la clase foo estática clsFoo.getName2() ' Devuelve "ghijkl" de la clase foo estática clsFoo.toString() ' Devuelve "class foo" del objeto java.lang.Class. oFoo = oXJB.NewInstance(clsFoo) oFoo.toString() ' Returns some text from the java.lang.Object's ' toString() method which foo inherits from. oFoo.toString2() ' Devuelve "xyz" de la instancia de clase foo
Puede crear un objeto JObjectProxy a partir del método JClassFactory.NewInstance() y también se puede crear a partir de cualquier llamada a método Java que normalmente devuelva un objeto de instancia de clase. Puede utilizar este objeto si tiene que redirigir el acceso al objeto de Java y puede acceder a todos los métodos estáticos y campos del objeto. Se puede acceder a todos los métodos de la instancia del objeto y los campos (incluidos los que se puede acceder porque son heredados).
El objeto JMethodArgs se crea a partir del método JClassFactory.GetArgsContainer(). Utilice este objeto como contenedor del método y argumentos de constructor. Debe utilizar este objeto cuando altere temporalmente el tipo de objeto durante la llamada a un método (por ejemplo, cuando envía un tipo java.lang.String JProxyObject a un constructor que normalmente recibe un tipo java.lang.Object).
Puede utilizar dos grupos de métodos para añadir argumentos al grupo: Add y Set. Puede utilizar Add para añadir argumentos en el orden en que se declaran. Alternativamente, puede utilizar Set para establecer un argumento basado en su posición en la lista de argumentos (donde el primer argumento es la posición 1).
Por ejemplo, si tiene un objeto Java Object Foo que ha tomado un constructor Foo (int, String, Object), puede utilizar un objeto JMethodArgs como se muestra en la siguiente extracción de código:... Dim oArgs as Object set oArgs = oXJB.GetArgsContainer() oArgs.AddInt(CLng(12345)) oArgs.AddString("Apples") oArgs.AddObject("java.lang.Object", oSomeJObjectProxy) Dim clsFoo as Object Dim oFoo as Object set clsFoo = oXJB.FindClass("com.mypackage.foo") set oFoo = oXJB.NewInstance(clsFoo, oArgs) ' To reuse the oArgs object, just clear it and use the add method ' again, or alternatively, use the Set method to reset the parameters ' Here, we will use Set oArgs.SetInt(1, CLng(22222)) oArgs.SetString(2, "Bananas") oArgs.SetObject(3, "java.lang.Object", oSomeOtherJObjectProxy) Dim oFoo2 as Object set oFoo2 = oXJB.NewInstance(clsFoo, oArgs)
- En Java:
- AddObject (String strObjectTypeName, Object oArg) Añade un objeto arbitrario al contenedor de argumentos en la siguiente posición disponible y proporciona el objeto al nombre de clase especificado en el primer parámetro. Las matrices se especifican utilizando la sintaxis [] tradicional; por ejemplo:
AddObject("java.lang.Object[][]", oMy2DArrayOfFooObjects)
oAddObject("int[]", oMyArrayOfInts)
- AddByte (Byte byteArg)
Añade un valor de byte primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddBoolean (Boolean bArg)
Añade un valor booleano primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddShort (Integer iArg)
Añade un valor short primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddInt (Long lArg)
Añade un valor int primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddLong (Currency cyArg)
Añade un valor long primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddFloat (Single fArg)
Añade un valor flotante primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddDouble (Double dArg)
Añade un valor double primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddChar (String strArg)
Añade un valor char primitivo al contenedor de argumentos de la siguiente posición disponible.
- AddString (String strArg)
Añade el argumento en forma de serie al contenedor de argumentos en la siguiente posición disponible.
- SetObject (Integer iArgPosition, String strObjectTypeName, Object oArg) Añade un objeto arbitrario al contenedor de argumentos de la siguiente posición disponible y lo proporciona al nombre de clase o nombre de tipo primitivo especificado en el segundo parámetro. Las matrices se especifican utilizando la sintaxis [] tradicional; por ejemplo:
SetObject(1, "java.lang.Object[][]", oMy2DArrayOfFooObjects)
oSetObject(2, "int[]", MyArrayOfInts)
- SetByte (Integer iArgPosition, Byte byteArg)
Establece en un valor de byte primitivo el contenedor de argumentos de la posición especificada.
- SetBoolean (Integer iArgPosition, Boolean bArg)
Establece en un valor booleano primitivo el contenedor de argumentos de la posición especificada.
- SetShort (Integer iArgPosition, Integer iArg)
Establece en un valor short primitivo el contenedor de argumentos de la posición especificada.
- SetInt (Integer iArgPosition, Long lArg)
Establece en un valor int primitivo el contenedor de argumentos de la posición especificada.
- SetLong (Integer iArgPosition, Currency cyArg)
Establece en un valor long primitivo el contenedor de argumentos de la posición especificada.
- SetFloat (Integer iArgPosition, Single fArg)
Establece en un valor flotante primitivo el contenedor de argumentos de la posición especificada.
- SetDouble (Integer iArgPosition, Double dArg)
Establece en un valor double primitivo el contenedor de argumentos de la posición especificada.
- SetChar (Integer iArgPosition, String strArg)
Establece en un valor char primitivo el contenedor de argumentos de la posición especificada.
- SetString (Integer iArgPosition, String strArg)
Establece en un valor java.lang.String el contenedor de argumentos de la posición especificada.
- Object Item(Integer iArgPosition)
Devuelve el valor de un argumento en una posición de argumento específica.
- Clear()
Elimina todos los argumentos del contenedor y restaura la siguiente posición disponible a uno.
- Long Count()
Devuelve el número de argumentos del contenedor.