java - 在 Java 中返回一个全局对象

标签 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 本身很好,因为我也在使用这个方法作为回调函数。不过,这是我第一次真正尝试返回一个对象。我做错了什么?

最佳答案

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

关于java - 在 Java 中返回一个全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493851/

相关文章:

JNI C++ 环境中的 Java 线程仅使用一个内核。 Arm 处理器和 Ubuntu

java - vector 内的 vector

c++ - 将类指针传递给类的构造函数

c++ - 自定义结构集声明错误

c++ - 在函数、编译时或运行时创建的数组?

java - 在 JNI 上下文中存储 C++ 类

java - 如何在 Java 中抛出正确的异常

java - 找不到符号方法元工厂(Lookup,String,MethodType,MethodType,MethodHandle,MethodType)

JAVA 和 PHP 在同一台服务器上

android - JNI 多个注册调用