003
19.03.2006, 09:24 Uhr
Neubauer
|
Vielen Dank schon mal für die Antworten. Leider bin ich noch nicht weiter gekommen.
Hier mal das Beispiel:
C++: |
#include "MathFuncsDll.h" #include <conio.h> #include <stdio.h> #include "hotkeyhandler.h" void OnHotKey(void *) { // Invoke Java Function } CHotkeyHandler hk; JNIEXPORT void JNICALL Java_gui_Gui_activateGlobalHotkeys (JNIEnv * env, jobject obj) { int err, id; hk.RemoveHandler(id = 0); hk.InsertHandler(MOD_CONTROL | MOD_ALT, 'A', OnHotKey, id); err = hk.Start("calc.exe"); if (err != CHotkeyHandler::hkheOk) { printf("Error %d on Start()\n", err); } }; JNIEXPORT void JNICALL Java_gui_Gui_deactivateGlobalHotkeys (JNIEnv * env, jobject obj) { int err = hk.Stop(); }
|
In OnHotKey soll sozusagen die Java-Methode aufgerufen werden und zwar von der JVM, die früher die activateGlobalHotkeys aufgerufen hat. Ich habe es probiert in dem ich global die JNIEnv Information speichere und in OnHotKey darauf zurückgreife, aber dann bekam ich Laufzeitfehler, die irgendwas mit Zugriff zu tun hatten.
Mir ist klar, dass da auch irgendwie noch ein Threadproblem vorhanden ist, da ja die JVM nach Aktivierung der global hotkeys weiter läuft und man ja versucht wieder darauf zurückzugreifen. Es gibt da wohl die Möglichkeit mit attachthread zu arbeiten, aber das habe ich noch nicht hinbekommen. Das Problem ist eine Methode in der JVM anzustoßen, die währenddessen trotzdem weiterläuft und ja auch andere Events von Benutzern animmt.
Hat da jemand eine Idee? Vielleicht auch Codefragmente ? |