我正在使用Java的资产管理器在我的本地环境中打开一个文件。我希望在init上只打开一次这个文件,然后多次使用文件中定义的函数。为了这个目的,我需要让资产管理者保持全球化。我目前在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。这是有道理的,因为在init,它不是。我找不到任何关于如何解决这个问题的参考资料。大多数全局参考问题都是关于保持对对象的引用。但是,我需要保留对AAssetManager的引用。
答案 0 :(得分:1)
然而,这抱怨没有定义globalManager。
当然可以。它没有定义。
这是有道理的,因为在init,它不是。我找不到任何关于如何解决这个问题的参考资料。
呃,你考虑过定义吗?
显然,您需要的是一个'static jobject globalManager'在全局范围内声明,而不是在您第一次尝试使用它后在块中声明的localvariable。