【问题标题】:Java JNI - Calling object methodJava JNI - 调用对象方法
【发布时间】:2010-01-30 19:06:42
【问题描述】:

我目前正在使用 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。谢谢!

谢谢!

【问题讨论】:

  • 你能详细说明“不起作用”吗?发生什么了?你期望发生什么?
  • 方法签名看起来很有趣。我脑子里没有 JNI 签名规则,但 Java_Mudkiptz_Main_fctC_1sendEvent 看起来不对。为什么函数名中间有个“1”?
  • 对不起,事实上,发生的情况是该方法被调用但当它应该返回正确的KeyCode时总是返回0。对于 JNI 签名,我不理解声明中的 1,但我的界面中的所有其他 JNI 方法都在工作,所以我略过它。谢谢!

标签: object methods java-native-interface


【解决方案1】:

我终于发现我做错了什么。似乎 getKeyCode 不是我正在寻找的功能。

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

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多