Я пытаюсь найти экземпляр определенного класса для вызова нестатического метода.
Я видел это предложение в документации:
В результате потоки, выполняющие код языка программирования Java, потоки, пытающиеся возобновить выполнение кода языка программирования Java, и потоки, пытающиеся выполнить функции JNI, обычно останавливаются.
Что касается этого предложения, я выполнил его в собственный поток, который я создал в процессе JVM. Я думаю, что это может иметь некоторый эффект (возможно, мой поток застопорился, потому что это не обычный поток JVM).
Кто-нибудь знает, почему это могло произойти? Как это решить? Знакомы ли вы с другим методом вызова метода в конкретном экземпляре класса?
Концептуально это мой код:
Код: Выделить всё
// Get JVM
int vmCount;
JavaVM* jvm_array[1];
JNI_GetCreatedJavaVMs(jvm_array, 1, &vmCount);
JavaVM* jvm = jvm_array[0];
// AttachThread
JNIEnv* env;
JavaVMAttachArgs args;
args.version = JNI_VERSION_1_2;
args.name = "main";
args.group = NULL;
(*jvm)->AttachCurrentThread(jvm, (void**) &env, &args);
// Get JVMTI
jvmtiEnv* jvmti;
(*jvm)->GetEnv(jvm, (void**) &jvmti, JNI_VERSION_1_2);
// Enable can tag objects
jvmtiCapabilities cap = {0};
cap.can_tag_objects = 1;
(*jvmti)->AddCapabilities(jvmti, &cap);
// Find class using jvmti->GetLoadedClasses
jclass class = ...;
// Iterate over instances in heap
(*jvmti)->IterateOverInstancesOfClass(jvmti, class, JVMTI_HEAP_OBJECT_EITHER, callback, NULL);
Подробнее здесь: https://stackoverflow.com/questions/793 ... ting-stuck
Мобильная версия