2010-01-30 59 views
1

我目前正在使用JNI编程一些C++代码和Java之间的接口。Java JNI - 调用对象方法

我在我的GUI中收到了一些我想传递给C++事件处理函数的事件。

因此我调用了我在Java中编写的函数。

public void sendToEventQueue(AWTEvent evt) { 
    Mudkiptz.Main.fctC_sendEvent(evt); 
} 

该方法是在一个抽象类EventHdl我用作超级类keyEventHandler其中我超载的keyTyped(KeyEvent的)到该KeyEvent发送到与先前声明的方法,我的C++事件处理程序。

我的问题是,我想从我通过的KeyEvent获取我的keyEvent keyCode。

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); 
} 

不过,这并不正常工作... :(我不习惯JNI所以它可能是一个容易犯的错误。然而我真的很感激帮助

编辑:我应该是更精确。该方法返回,但键代码始终等于零时,它应该给密钥号码。谢谢!

谢谢!

+0

你能说说“不行”吗?怎么了?你期望发生什么? – JesperE

+0

方法签名看起来很有趣。我头上没有JNI签名规则,但是'Java_Mudkiptz_Main_fctC_1sendEvent'看起来不正确。为什么函数名称中间有一个“1”? – JesperE

+0

对不起,实际上,这个方法是calle,但是当它返回正确的KeyCode时总是返回0。 对于JNI签名,我不明白声明中的1,但是我的界面中的其他每个JNI方法都在工作,所以我非常感谢。谢谢! – malavv

回答

1

我终于找到我在做什么错了。好像getKeyCode不是我的功能寻找。

为了调试,我去了java调用,并将事件打印到字符串,并且即使在java中,keycode也始终等于0。所以,我检查转储和keyChar有我的输入的正确值。所以我改变了调用使用getKeyChar,而一切工作正常。

感谢您的帮助!