Java 코드에서 JNI를 사용하여 원시 C 코드를 호출합니다. 이것은 잘 작동하며 C 코드에서 일부 처리를 수행하고 있습니다. C 코드는 이벤트 리스너를 등록하여 C 부분에서 새로운 결과가 준비 될 때마다 알림을받습니다.JNI를 사용하여 C에서 Java로 콜백을 구현하는 방법은 무엇입니까?
은 지금은 그런 자바 코드에 결과를 반환 할 :
void notifyGazeEvent()
{
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "newGazeEvent", "(I)V");
if (mid == 0)
{
return;
}
printf("In C, about to enter Java");
(*env)->CallVoidMethod(env, obj, mid, 1);
}
문제는 지금 : 나는 JNIEnv의 객체와의하는 jobject 객체를 구할 수있는 곳 모른다.
JNIEXPORT void JNICALL
Java_a_b_C_doCalculation(JNIEnv *env, jobject obj)
{
// here I register all the handlers etc,
}
그러나 나는 자바 콜백을 수행 나의 방법까지 참조를 전달할 수있는 방법을 모른다 : 내가 처음 C 코드를 호출 할 때 전달됩니다.
[JavaCPP - 콜백 함수 만들기] (https://github.com/bytedeco/javacpp#creating-callback-functions)에서 확인할 수 있습니다. 그것은 당신에게 많은 문제를 줄 것입니다. –