Article View: es.comp.lenguajes.java
Article #17143Re: Callback en Java (2)
From: Alberto Fdez
Date: Fri, 01 Dec 2000 00:00
Date: Fri, 01 Dec 2000 00:00
102 lines
3468 bytes
3468 bytes
On Thu, 30 Nov 2000 21:57:57 +0100, Juan Gonzalo de Silva Medina
<gonzalo@caymasa.es> wrote:
>
>
>Alberto Fdez wrote:
>
>> [...]
>> (hablando en entornos MS-Windows)
>> Tengo una DLL y una aplicaci�n Java, esta Dll a veces necesita dar una
>> notificaci�n (un aviso no esperado por la aplici�n Java) a la
>> aplicacion Java, y ese es mi plroblema.
>>
>> Empleando JNI, se puede hacer (un mini-esqueleto)
>> [...]
>
>No me queda muy claro, pero...
Sorry,..
>
>Imagino que estas hablando de que en la DLL tienes un thread (o se
>arranca)y que cuando ocurre algo tu lo quieres notificar a un objeto que
>te han pasado si ha ocurrido algo.
>
>En principio yo lo que haria es crear el m�todo de la DLL est�tico, sin
>thread y me encargaria de ejecutarlo dentro de un thread de Java, para
>evitar la p�rdida del env.
Ok, (lo que tengo, y falla ...)
[JAVA]
public class jPruListen
{
public static void onFuncion(int N)
{
System.out.println("Parametro ofrecido : " + N);
}
}
// --------------------------------------------------------------------------
[C++]
__declspec(dllexport) int FuncPuente(int N)
{
//
// A "FuncPuente" la llamamos desde una pulsaci�n de un Bot�n.
// Al pulsar, "FuncPuente" entra en juego.
//
TRZDBG1("*** [DLL] INI FuncPuente().");
// ---------------------------------------------------------
// Llamamos (Intentamos) al metodo jPruListen.onFuncion
// ---------------------------------------------------------
//
JavaVM *jvm=NULL;
JNIEnv *env=NULL;
JDK1_1InitArgs vm_args;
jint iRet=0;
vm_args.version = 0x00010001;
iRet=JNI_GetDefaultJavaVMInitArgs(&vm_args); // Ok
iRet=JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); // Ok
iRet=jvm->AttachCurrentThread((void**)&env, 0); // Ok
jclass cls = env->FindClass("jPruListen"); // Aqu� --> ERROR
jmethodID mid = env->GetStaticMethodID(cls, "onFuncion", "(I)V");
env->CallStaticVoidMethod(cls, mid, 5);
jvm->DetachCurrentThread();
jvm->DestroyJavaVM();
return 0;
}
// --------------------------------------------------------------------------
>
>Cuando ocurre alg�n evento llamo al m�todo en cuesti�n del objeto (esto
>si funciona, que yo tengo alguna llamada as�).
Agradecer�a una buena "orientaci�n", un pseudo codigo bastar�a.
>
>Luego vuelvo al inicio de la rutina C para seguir procesando (a la
>espera de lo que tu quieras).
>
>Tambi�n puedo retornar a Java y que este dentro del m�todo run me llame
>de nuevo si es necesario.
>
>Tambi�n, si lo que quiero hacer es soportar multiples listener, lo que
>haria es llamar a un m�todo de mi propio objeto y le pediria que hiciese
>la notificaci�n en mi lugar, claro que llamando al m�todo java que hace eso.
Juan, gracias por adelantado.
--
Alberto Fdez
<afa07$%&tid.es> // Where "$%&" = '@', Of course ...
Technical Details
Message-ID:
<otue2tg89dg7hc87a0cggf4faqucqbhn3i@4ax.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<902rmp$msd$1@nnrp1.deja.com> <3A26BF55.3010008@caymasa.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,766135f76ea77199 X-Google-Attributes: gid1116f3,public From: Alberto Fdez <albertoFdez@ver.Firma.see.Signature> Subject: Re: Callback en Java (2) Date: 2000/12/01 Message-ID: <otue2tg89dg7hc87a0cggf4faqucqbhn3i@4ax.com> X-Deja-AN: 699878128 Content-Transfer-Encoding: 8bit References: <902rmp$msd$1@nnrp1.deja.com> <3A26BF55.3010008@caymasa.es> Organization: Telefonica I+D Content-Type: text/plain; charset=ISO-8859-1 Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java