【发布时间】: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