Я создал один поток для вызова нативной функции, которая вызывает кодек MPEG2, который разработан на C. И callback_handler вызывает функцию java для предоставления фрейма изображения, а обработчик отображает фреймы в представлении изображения. И это работает нормально. но когда я пытаюсь создать два потока для вызова собственной функции для каждого потока и отображения двух видео. Я создал два обработчика для каждого потока. но когда я запустил приложение, оно вызывает собственные методы два раза, но после выполнения некоторой функции я получаю ошибку VM Aborting . Я искал эту проблему. И я обнаружил, что один JNIEnv может иметь только один поток. И для этого мы должны зарегистрировать поток JNIEnv в JavaVM. В callback_handler я делаю это с помощью этой функции
JNIEnv *env = RegisterWithVM(&jvm);
if((NULL == env) || (NULL == jvm))
{
__android_log_print(ANDROID_LOG_INFO,"JNI", "callback_handler call failed\n");
return;
}
И я также пытался связать текущий Thread Enviroment с JavaVM в собственной функции JNi, используя этот код.
gJavaVM->GetEnv((void**) &env, JNI_VERSION_1_6);
gJavaVM->AttachCurrentThread(&env, NULL);
Но после использования я получаю эту ошибку.
11-28 16:40:23.430: I/JNI(323): Loaded
11-28 16:40:23.430: I/JNI(323): Find the class
11-28 16:40:23.430: I/JNI(323): Registered...
11-28 16:40:23.430: I/JNI(323): Version...65540
11-28 16:40:23.440: I/JNI(323): CallDecoding function of thread is called
11-28 16:40:23.451: I/JNI(323): StartDecoding function is called
11-28 16:40:23.451: W/dalvikvm(323): JNI WARNING: threadid=7 using env from threadid=8
11-28 16:40:23.451: W/dalvikvm(323): in Lcom/example/Internet_TV12;.CallDecoding1 (ILjava/lang/Object;)V (NewByteArray)
11-28 16:40:23.451: I/dalvikvm(323): "Thread-8" prio=5 tid=7 NATIVE
11-28 16:40:23.451: I/dalvikvm(323): | group="main" sCount=0 dsCount=0 s=N obj=0x44ee97f0 self=0x131cc0
11-28 16:40:23.470: I/JNI(323): CallDecoding function of thread is called
11-28 16:40:23.470: I/JNI(323): In JNI interface image file opened
11-28 16:40:23.470: I/JNI(323): StartDecoding function is called
11-28 16:40:23.499: I/dalvikvm(323): | sysTid=331 nice=0 sched=0/0 cgrp=default handle=1153704
11-28 16:40:23.499: I/dalvikvm(323): | schedstat=( 28746111 138980250 15 )
11-28 16:40:23.499: I/dalvikvm(323): at com.example.Internet_TV12.CallDecoding1(Native Method)
11-28 16:40:23.499: I/dalvikvm(323): at com.example.Internet_TV12$4.run(Internet_TV12.java:57)
11-28 16:40:23.499: I/dalvikvm(323): at java.lang.Thread.run(Thread.java:1096)
11-28 16:40:23.499: E/dalvikvm(323): VM aborting
Может ли какой-нибудь орган помочь мне решить эту проблему ...
Заранее спасибо