39得票1回答
在IT技术中如何保持对JNIEnv环境的全局引用

我将 JNIEnv 存储在全局变量中,以便稍后调用静态的Java方法。但是是否需要像处理其他Java对象一样存储指向 JNIEnv 的全局指针,还是这是一个特殊情况,不需要这样做呢。JNIEnv* globalEnvPointer; [JNICALL etc] void init(JNIEN...

14得票1回答
JNI线程模型?

当我从Java调用C/C++时,JavaVM或JNI会创建一个新线程来运行C/C++代码,而我的Java线程等待吗? 我的理解是,当您从Java调用C/C++代码时,JNI(Java Native Interface)将在同一个线程上执行该代码。因此,在C/C++代码中创建新线程可能不是必需...

9得票2回答
什么是保存JNIEnv*的最佳方法?

我有一个带有JNI的Android项目。在实现监听器类的CPP文件中,存在一个名为x()的回调函数。当调用x()函数时,我想调用Java类中的另一个函数。但是,为了调用该Java函数,我需要访问JNIEnv*。 我知道在回调的同一CPP文件中,有一个函数: static jboolean ...

8得票1回答
JNI_CreateJavaVM()以退出码1终止

我正在尝试使用JNI从C++调用Java方法。为此,我已经安装了jdk1.7.0_51,链接jdk1.7.0_51\lib\jvm.lib,并包括jdk1.7.0_51\include和jdk1.7.0_51\include\win32。在Visual Studio 2012中使用以下代码,我...

8得票2回答
在Android中,如何缓存JNI对象并保证线程安全性。

我正在使用本地线程(pthreads)编写C++应用程序,并需要调用一些Java方法等。我不确定哪些JNI对象可以安全缓存,即存储在我的C++对象中以供稍后使用,可能/很可能由不同的线程使用。我知道如果我的类的方法可以被不同的线程调用,我不能缓存JNIEnv,而是要缓存JavaVM并通过附加当...

7得票1回答
Android JNI错误:NoSuchMethodError:没有非静态方法。

我想要做的事情如下所示。 Java -> 调用 C++ 函数 A C++ 函数 A 调用 C++ 函数 B C++ 函数 B 调用 Java 方法 C 我需要存储 JVM(2)和全局 jobject(3)。 但在第 3 步中, JNI DETECTED ERROR IN AP...