Java JNI - 调用对象方法

时间:2010-01-30 19:06:43

标签: object methods java-native-interface

我目前正在使用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时总是等于零。谢谢!

谢谢!

1 个答案:

答案 0 :(得分:2)

我终于找到了我做错的事。似乎getKeyCode不是我正在搜索的功能。

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

感谢您的帮助!