jni への Java コード呼び出しを行うことはできますが、jni から Java への呼び出しで問題が発生します。以下のコードと結果を参照してください。
Java では:
public class SocketClient {
private native void nativeInit();
public void Init()
{
nativeInit();
}
.........
public boolean IsConnected()
{
Log.i("Test", "Hien public boolean IsConnected()");
return _is_connected;
}
.......
Init メソッドを呼び出します
SocketClient socketClient = new SocketClient();
socketClient.Init();
Jni で:
JNIEXPORT void Java_SocketClient_nativeInit (JNIEnv* env, jobject obj)
{
LOG_INFO("Hien2 Java_SocketClient_nativeInit at jni layer");
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "IsConnected", "()Z");
int temp = (*env)->CallBooleanMethod(env, cls, mid);
LOG_INFO("Hien3 temp=%d", temp);
}
結果出力は以下のとおりです。
Hien2 Java_SocketClient_nativeInit at jni layer
Hien3 temp=168
IsConnected() のコードは呼び出されません!!!