我目前正在使用JNI编写一些C ++代码和Java之间的接口。
我在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,所以这可能是一个容易犯的错误,但我真的很感激帮助。
编辑:我应该更准确。方法返回但keyCode在应该给keyCode时总是等于零。谢谢!
谢谢!
答案 0 :(得分:2)
我终于找到了我做错的事。似乎getKeyCode不是我正在搜索的功能。
为了调试,我去了java调用并将事件打印到字符串,即使在java中,keycode总是等于0。所以,我检查转储和keyChar具有正确的输入值。所以我改变了调用,改为使用getKeyChar,一切正常。
感谢您的帮助!