Обратный вызов метода Java из c ++ - PullRequest
0 голосов
/ 07 августа 2010

Вот моя ситуация, и она немного сложная, но так должно быть.Я реализую программу из Java, которая открывает приложение с помощью JNative.Приложение написано на C ++.Но когда приложение завершено, я хочу, чтобы оно вызвало обратный вызов Java, чтобы Java знала, что запуск завершен.Могу ли я сделать это и как?Я знаю, что должен использовать JNI, но я не нашел никакого примера по этому поводу.Спасибо.

1 Ответ

1 голос
/ 07 августа 2010

Под "открытием приложения" вы подразумеваете запуск внешнего процесса или вызов библиотеки?

Если вы только запускаете исполняемый файл, вы можете использовать Runtime.getRuntime().exec для запуска процесса и использовать возвращаемый дескриптор процесса, чтобы получить код возврата из процесса. Вы также можете зафиксировать вывод процесса с помощью getInputStream из запущенного вами процесса.

Однако, если вы на самом деле вызываете процесс C, тогда да, JNI будет предпочтительным решением. Хорошее руководство по вызовам JNI для объекта Java можно найти здесь: http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html

Суть этого урока в следующем:

JNIEXPORT void JNICALL
Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth)
{
  jclass cls = (*env)->GetObjectClass(env, obj);
  jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V");
  if (mid == 0)
    return;
  printf("In C, depth = %d, about to enter Java\n", depth);
  (*env)->CallVoidMethod(env, obj, mid, depth);
  printf("In C, depth = %d, back from Java\n", depth);
}

Короче говоря, из C вам нужно получить метод, прежде чем вы сможете его вызвать. Вы также можете использовать инструмент javap для генерации сигнатур методов, чтобы их можно было вызывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...