我jvm->GetEnv(&envThread, JNI_VERSION_1_6)
用来获取多个线程的“env”以便进行多个envThread->GetMethodID()
调用。两个线程都正确连接到 JVM。
我在第一个线程上调用“GetMethodID()”返回的函数没有问题,但是当第二个线程尝试调用时,我看到以下消息:
art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: thread Thread[13,tid=8207,Native,Thread*=0xaed08400,peer=0x12dcd080,"Thread-10224"]
using JNIEnv* from thread Thread[1,tid=8148,Runnable,Thread*=0xb4e07800,peer=0x87bc5ef0,"main"]
A/art(8148): art/runtime/check_jni.cc:65 in call to CallVoidMethodV
08-31 14:11:08.029: A/art(8148): art/runtime/check_jni.cc:65] "Thread-10224" prio=10 tid=13 Runnable
08-31 14:11:08.029: A/art(8148): art/runtime/check_jni.cc:65] group="main" sCount=0 dsCount=0 obj=0x12dcd080 self=0xaed08400
08-31 14:11:08.029: A/art(8148): art/runtime/check_jni.cc:65] sysTid=8207 nice=-11 cgrp=apps sched=0/0 handle=0xafb18b00
08-31 14:11:08.029: A/art(8148): art/runtime/check_jni.cc:65] state=R schedstat=( 17710887 6014947 64 ) utm=1 stm=0 core=3 HZ=100
08-31 14:11:08.029: A/art(8148): art/runtime/check_jni.cc:65] | stack=0xaee04000-0xaee06000 stackSize=1012KB
因为我对第二个线程的调用jvm->getEnv()
返回JNI_OK
,所以它已经附加(如预期的那样)。但出乎意料的是,返回的 JniENV 与第一个线程中的完全相同。从而导致崩溃。
有没有人见过这种东西?我很迷茫不知道该怎么办...
谢谢。