39 CAkJNIThread(JavaVM* jvm) : m_jvm(jvm), m_jEnv(
NULL), m_mustDetachExplicitely(false), m_mustPopLocalFrame(false)
44 CAkJNIThread(JavaVM* jvm,
int numLocalRefs) : m_jvm(jvm), m_jEnv(
NULL), m_mustDetachExplicitely(false), m_mustPopLocalFrame(false)
46 AcquireEnv(jvm, numLocalRefs);
51 if (m_mustPopLocalFrame)
53 m_jEnv->PopLocalFrame(
NULL);
54 m_mustPopLocalFrame =
false;
56 if (m_jvm !=
NULL && m_jEnv !=
NULL && m_mustDetachExplicitely)
58 m_jvm->DetachCurrentThread();
59 m_mustDetachExplicitely =
false;
70 return m_jEnv !=
NULL;
74 void AcquireEnv(JavaVM* jvm,
int numLocalRefs)
79 jvm->GetEnv((
void**)&m_jEnv, JNI_VERSION_1_6);
82 JavaVMAttachArgs lJavaVMAttachArgs;
83 lJavaVMAttachArgs.version = JNI_VERSION_1_6;
84 lJavaVMAttachArgs.name =
"NativeThread";
85 lJavaVMAttachArgs.group =
NULL;
87 jvm->AttachCurrentThread(&m_jEnv, &lJavaVMAttachArgs);
88 m_mustDetachExplicitely =
true;
90 if (m_jEnv && numLocalRefs > 0)
92 m_mustPopLocalFrame = 0 == m_jEnv->PushLocalFrame(numLocalRefs);
98 bool m_mustDetachExplicitely: 1;
99 bool m_mustPopLocalFrame: 1;