2

我正在使用 Java 中的资产管理器打开一个文件以在我的本地环境中读取。我希望只在初始化时打开这个文件一次,然后多次使用文件中定义的函数。为此,我需要将资产管理器保持在全局范围内。我目前在 C++ 中有以下内容:

extern "C" {

JNIEXPORT jstring JNICALL
Java_com_torch_torchdemo_TorchDemo_callTorch( JNIEnv* env,
                                            jobject thiz,
                                            jobject assetManager) {
// get native asset manager
if(globalManager == NULL){
jobject globalManager = env->NewGlobalRef(assetManager)
AAssetManager* manager = AAssetManager_fromJava(env, globalManager);
}

但是,这抱怨 globalManager 没有定义。这是有道理的,因为在初始化时,它不是。我找不到任何关于如何解决这个问题的参考资料。大多数全局引用问题都是关于保持对对象的引用。但是,我需要保留对 AAssetManager 的引用。

4

1 回答 1

1

但是,这抱怨 globalManager 没有定义。

当然可以。它没有定义。

这是有道理的,因为在初始化时,它不是。我找不到任何关于如何解决这个问题的参考资料。

呃,你考虑过定义它吗?

显然,您需要的是在全局范围内声明的“静态 jobject globalManager”,而不是在您第一次尝试使用它之后在块中声明的局部变量。

于 2013-06-16T01:00:04.580 回答