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所以它可能是一个容易犯的错误。然而我真的很感激帮助
编辑:我应该是更精确。该方法返回,但键代码始终等于零时,它应该给密钥号码。谢谢!
谢谢!
你能说说“不行”吗?怎么了?你期望发生什么? – JesperE
方法签名看起来很有趣。我头上没有JNI签名规则,但是'Java_Mudkiptz_Main_fctC_1sendEvent'看起来不正确。为什么函数名称中间有一个“1”? – JesperE
对不起,实际上,这个方法是calle,但是当它返回正确的KeyCode时总是返回0。 对于JNI签名,我不明白声明中的1,但是我的界面中的其他每个JNI方法都在工作,所以我非常感谢。谢谢! – malavv