Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object javajni-调用对象方法 我现在正在使用JNI ./P>编程一些C++代码和java之间的接口。 我在GUI中得到一些事件,我想传递给C++事件处理程序。_Object_Methods_Java Native Interface - Fatal编程技术网

Object javajni-调用对象方法 我现在正在使用JNI ./P>编程一些C++代码和java之间的接口。 我在GUI中得到一些事件,我想传递给C++事件处理程序。

Object javajni-调用对象方法 我现在正在使用JNI ./P>编程一些C++代码和java之间的接口。 我在GUI中得到一些事件,我想传递给C++事件处理程序。,object,methods,java-native-interface,Object,Methods,Java Native Interface,因此,我调用了一个用Java编写的函数 public void sendToEventQueue( AWTEvent evt ) { Mudkiptz.Main.fctC_sendEvent( evt ); } 此方法处于抽象类EvEnDDL中,我用作KeaveEnthDeLer的超类,在其中,我超载了键入的键事件(KEYEVER),用以前声明的方法将密钥事件发送给C++事件处理程序。 我的问题是我想从我传递的keyEvent中获取我的keyEvent keyCode JNIEXPORT

因此,我调用了一个用Java编写的函数

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

此方法处于抽象类EvEnDDL中,我用作KeaveEnthDeLer的超类,在其中,我超载了键入的键事件(KEYEVER),用以前声明的方法将密钥事件发送给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,所以这可能是一个容易犯的错误,不过我真的非常感谢您的帮助

编辑:我应该更精确一些。方法返回,但是当它应该给出键码时,键码总是等于零。谢谢


谢谢!

我终于发现我做错了什么。看来getKeyCode不是我要搜索的函数

为了调试,我转到java调用并将事件打印为字符串,即使在java中,keycode始终等于0。因此,我检查了dump,keyChar具有正确的输入值。因此,我将调用改为使用getKeyChar,一切正常


谢谢你的帮助!

你能详细说明一下“不起作用”吗?发生了什么?你期望发生什么?方法签名看起来很有趣。我脑子里没有JNI签名规则,但是
Java\u Mudkiptz\u Main\u fctC\u 1sendEvent
看起来不正确。为什么会有“1”在函数名的中间?抱歉,事实上,该方法是CALE,但当它返回正确的键值时总是返回0。对于JNI签名,我不理解声明中的1,但是我的接口中的每一个JNI方法都在工作,所以我很好地把它传递过来。谢谢!