Je suis en train de programmer une interface entre un code C++ et Java en utilisant JNI.Java JNI - Méthode d'objet appelant
Je reçois des événements dans mon interface graphique que je souhaite transmettre à un gestionnaire d'événements C++. J'appelle donc une fonction que j'ai écrite en Java.
public void sendToEventQueue(AWTEvent evt) {
Mudkiptz.Main.fctC_sendEvent(evt);
}
Cette méthode est dans une EventHdl de classe abstraite que j'ai utilisé comme une super classe pour keyEventHandler où je surcharger le keyTyped (KeyEvent) pour envoyer le KeyEvent à mon gestionnaire d'événements C++ avec la méthode précédemment déclarée.
Mon problème est que je veux obtenir mon keyEvent keyCode de l'événement KeyEvent que j'ai passé.
JNIEXPORT void JNICALL Java_Mudkiptz_Main_fctC_1sendEvent
(JNIEnv* env, jclass, jobject evt) {
// Obtenir les infos (Get information)
jclass keyEventClass = env->FindClass("java/awt/event/KeyEvent");
if(env->IsInstanceOf(evt, keyEventClass)) {
jmethodID getKeyCode = env->GetMethodID(keyEventClass, "getKeyCode", "()I");
int keyCode = 0;
keyCode = env->CallIntMethod(evt, getKeyCode);
}
// getInstance()
Application::obtenirInstance()->getEventQueue()->push(evt);
}
Mais ça ne marche pas non ... :(Je ne suis pas habitué à JNI il peut donc être une erreur facile néanmoins, je serais vraiment reconnaissant de l'aide
Edit:. Je aurais dû plus précis. le retour de la méthode mais codeTouche est toujours égale à zéro quand il doit donner le code d'activation. Merci!
Merci!
Pouvez-vous élaborer sur «ne fonctionne pas»? Ce qui se produit? Qu'attendez-vous qu'il se passe? – JesperE
La signature de la méthode semble amusante. Je n'ai pas les règles de signature JNI dans ma tête, mais 'Java_Mudkiptz_Main_fctC_1sendEvent' ne semble pas correct. Pourquoi y a-t-il un "1" au milieu du nom de la fonction? – JesperE
Désolé, en fait, ce qui hapens est que la méthode est calle mais retourne toujours 0 quand il devrait retourner le bon KeyCode. Pour la signature JNI, je ne comprends pas le 1 dans la déclaration, mais toutes les autres méthodes JNI de mon interface fonctionnent, donc je préfère le faire. Merci! – malavv