2010-01-30 5 views
1

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!

+0

Pouvez-vous élaborer sur «ne fonctionne pas»? Ce qui se produit? Qu'attendez-vous qu'il se passe? – JesperE

+0

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

+0

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

Répondre

1

j'ai finalement trouvé ce que je faisais mal. il semble que getKeyCode était pas la fonction que j'étais cherchant

Pour déboguer, je suis allé à l'appel java et j'imprime l'événement en chaîne et le code clé est toujours égal à 0 même en java. Donc, je vérifie la décharge et keyChar a eu la valeur correcte de mon entrée. J'ai donc changé l'appel pour utiliser getKeyChar à la place et tout fonctionne correctement.

Merci pour votre aide!