在Java中返回一个全局对象

时间:2011-03-30 23:57:23

标签: java c++ java-native-interface

我有两个JNI功能。第一个允许程序员将任意Java对象传递给C ++:

void Java_org_love_Lua_pushLightUserdata( JNIEnv* env, jobject javaThis, jlong state, jobject value )
{
    jobject* objectRef = lua_newuserdata( (lua_State*)state, sizeof( jobject ) );
    *objectRef = (*env)->NewGlobalRef( env, value );
}

然后还有另一个检索此对象:

jobject Java_org_love_Lua_toUserdata( JNIEnv* env, jobject javaThis, jlong state, jint index )
{
    jobject obj = *(jobject*)lua_touserdata( (lua_State*)state, (int)index );
    return obj;
}

但是,由于某种原因,此函数始终向Java返回 null 值。我知道jobject本身很好,因为我也在使用这个方法来进行回调函数。这是我第一次真正尝试返回一个对象。我做错了什么?

1 个答案:

答案 0 :(得分:1)

因为你没有返回你小心创建的全局引用,而是可能是一个长期陈旧的本地引用?