Java JNI - вызов метода объекта - PullRequest
1 голос
/ 30 января 2010

В настоящее время я программирую интерфейс между некоторым кодом C ++ и Java с использованием JNI.

Я получаю некоторые события в моем графическом интерфейсе, которые я хочу передать обработчику событий C ++.

Поэтому я вызываю функцию, написанную на Java.

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

Этот метод находится в абстрактном классе EventHdl, который я использовал в качестве суперкласса для keyEventHandler, в котором я перегружаю keyTyped (KeyEvent) для отправки KeyEvent в мой обработчик событий C ++ с помощью ранее объявленного метода.

Моя проблема в том, что я хочу получить свой keyEvent keyCvent из KeyEvent, который я передал.

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. спасибо!

Спасибо!

1 Ответ

2 голосов
/ 30 января 2010

Я наконец обнаружил, что я делаю не так. Кажется, что getKeyCode не была функцией, которую я искал.

Для отладки я пошел на вызов java и распечатал событие в строку, а код ключа всегда равен 0 даже в java. Итак, я проверяю, что дамп и keyChar имеют правильное значение моего ввода. Поэтому я изменил вызов, чтобы использовать вместо него getKeyChar, и все работает нормально.

Спасибо за вашу помощь!

...