1
我目前正在使用JNI編程一些C++代碼和Java之間的接口。Java JNI - 調用對象方法
我在我的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所以它可能是一個容易犯的錯誤。然而我真的很感激幫助
編輯:我應該是更精確。該方法返回,但鍵代碼始終等於零時,它應該給密鑰號碼。謝謝!
謝謝!
你能說說「不行」嗎?怎麼了?你期望發生什麼? – JesperE
方法簽名看起來很有趣。我頭上沒有JNI簽名規則,但是'Java_Mudkiptz_Main_fctC_1sendEvent'看起來不正確。爲什麼函數名稱中間有一個「1」? – JesperE
對不起,實際上,這個方法是calle,但是當它返回正確的KeyCode時總是返回0。 對於JNI簽名,我不明白聲明中的1,但是我的界面中的其他每個JNI方法都在工作,所以我非常感謝。謝謝! – malavv