Object javajni-调用对象方法 我现在正在使用JNI ./P>编程一些C++代码和java之间的接口。 我在GUI中得到一些事件,我想传递给C++事件处理程序。
因此,我调用了一个用Java编写的函数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
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方法都在工作,所以我很好地把它传递过来。谢谢!