2010-01-30 80 views
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所以它可能是一個容易犯的錯誤。然而我真的很感激幫助

編輯:我應該是更精確。該方法返回,但鍵代碼始終等於零時,它應該給密鑰號碼。謝謝!

謝謝!

+0

你能說說「不行」嗎?怎麼了?你期望發生什麼? – JesperE

+0

方法簽名看起來很有趣。我頭上沒有JNI簽名規則,但是'Java_Mudkiptz_Main_fctC_1sendEvent'看起來不正確。爲什麼函數名稱中間有一個「1」? – JesperE

+0

對不起,實際上,這個方法是calle,但是當它返回正確的KeyCode時總是返回0。 對於JNI簽名,我不明白聲明中的1,但是我的界面中的其他每個JNI方法都在工作,所以我非常感謝。謝謝! – malavv

回答

1

我終於找到我在做什麼錯了。好像getKeyCode不是我的功能尋找。

爲了調試,我去了java調用,並將事件打印到字符串,並且即使在java中,keycode也始終等於0。所以,我檢查轉儲和keyChar有我的輸入的正確值。所以我改變了調用使用getKeyChar,而一切工作正常。

感謝您的幫助!