хорошо, поэтому мой java-код:
private static native void setNativeFiles(mFileDescriptor[] r);
public void setFiles(mFileDescriptor[] files){
setNativeFiles(files);
}
static class mFileDescriptor{
private FileDescriptor fd;
private long offset;
private long size;
public FileDescriptor getFd() {
return fd;
}
public void setFd(FileDescriptor fd) {
this.fd = fd;
}
public long getOffset() {
return offset;
}
public void setOffset(long offset) {
this.offset = offset;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
}
mFileDescriptor является внутренним классом между прочим ...
мой код c:
void Java_com_ultrasound_JNIinterface_setNativeFiles(JNIEnv* env, jclass mclass, jobjectArray arr){
LOGI("Setting Native files");
jclass filedescriptor = env->FindClass("com/ultrasound/JNIinterface/mFileDescriptor");
int length = env->GetArrayLength(arr);
for(int index = 0; index < length; index++)
{
//jclass mvclass = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(filedescriptor, "getFd", "()Ljava/io/FileDescriptor;");
jobject temp = env->CallObjectMethod( arr, mid);
int mvdata0 = reinterpret_cast<int>(&temp);
mid = env->GetMethodID(filedescriptor, "getOffset", "()L");
temp = env->CallObjectMethod( arr, mid);
long mvdata1 = reinterpret_cast<long>(&temp);
mid = env->GetMethodID(filedescriptor, "getSize", "()L");
temp = env->CallObjectMethod( arr, mid);
long mvdata2 = reinterpret_cast<long>(&temp);
mFileDescriptor * fp;
switch(index){
case 0:
fp = &ch0Descript;
fp->fd = mvdata0;
fp->offset = mvdata1;
fp->size = mvdata2;
break;
case 1:
fp = &ch1Descript;
fp->fd = mvdata0;
fp->offset = mvdata1;
fp->size = mvdata2;
break;
case 2:
fp = &ch2Descript;
fp->fd = mvdata0;
fp->offset = mvdata1;
fp->size = mvdata2;
break;
default:
LOGE("Native file indexing failed");
}
}
LOGI("Native files set");
}
всякий раз, когда я вызываю setFiles, я получаю это:
03-23 00:13:11.080: I/(9879): Setting Native files
03-23 00:13:11.080: I/(9879): Right before loop
03-23 00:13:11.080: I/(9879): IN FOR LOOP
03-23 00:13:11.501: W/ActivityManager(175): Activity pause timeout for HistoryRecord{406814b8 com.ultrasound/.UltraSoundJNIActivity}
03-23 00:13:12.241: W/dalvikvm(9879): threadid=10: spin on suspend #1 threadid=1 (pcf=0)
03-23 00:13:12.982: W/dalvikvm(9879): threadid=10: spin on suspend #2 threadid=1 (pcf=0)
03-23 00:13:12.982: I/dalvikvm(9879): "Thread-10" prio=5 tid=10 RUNNABLE
03-23 00:13:12.982: I/dalvikvm(9879): | group="main" sCount=0 dsCount=0 obj=0x40651440 self=0x136c48
03-23 00:13:12.982: I/dalvikvm(9879): | sysTid=9892 nice=0 sched=0/0 cgrp=default handle=1279040
03-23 00:13:12.982: I/dalvikvm(9879): | schedstat=( 1495360 488283 24 )
03-23 00:13:12.982: I/dalvikvm(9879): at com.ultrasound.JNIinterface$1.run(JNIinterface.java:~31)
03-23 00:13:12.982: I/dalvikvm(9879): at java.lang.Thread.run(Thread.java:1019)
03-23 00:13:12.982: I/dalvikvm(9879): "main" prio=5 tid=1 RUNNABLE
03-23 00:13:12.982: I/dalvikvm(9879): | group="main" sCount=1 dsCount=0 obj=0x40161190 self=0xce68
03-23 00:13:12.982: I/dalvikvm(9879): | sysTid=9879 nice=0 sched=0/0 cgrp=default handle=-1345002432
03-23 00:13:12.982: I/dalvikvm(9879): | schedstat=( 64514163 45135496 61 )
03-23 00:13:12.992: I/dalvikvm(9879): at com.ultrasound.JNIinterface.setNativeFiles(Native Method)
03-23 00:13:12.992: I/dalvikvm(9879): at com.ultrasound.JNIinterface.setFiles(JNIinterface.java:105)
03-23 00:13:12.992: I/dalvikvm(9879): at com.ultrasound.UltraSoundJNIActivity.onCreate(UltraSoundJNIActivity.java:59)
03-23 00:13:12.992: I/dalvikvm(9879): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-23 00:13:12.992: I/dalvikvm(9879): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
03-23 00:13:12.992: I/dalvikvm(9879): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
03-23 00:13:12.992: I/dalvikvm(9879): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
03-23 00:13:12.992: I/dalvikvm(9879): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
03-23 00:13:12.992: I/dalvikvm(9879): at android.os.Handler.dispatchMessage(Handler.java:99)
03-23 00:13:12.992: I/dalvikvm(9879): at android.os.Looper.loop(Looper.java:130)
03-23 00:13:12.992: I/dalvikvm(9879): at android.app.ActivityThread.main(ActivityThread.java:3835)
03-23 00:13:12.992: I/dalvikvm(9879): at java.lang.reflect.Method.invokeNative(Native Method)
03-23 00:13:12.992: I/dalvikvm(9879): at java.lang.reflect.Method.invoke(Method.java:507)
03-23 00:13:12.992: I/dalvikvm(9879): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
03-23 00:13:12.992: I/dalvikvm(9879): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
03-23 00:13:12.992: I/dalvikvm(9879): at dalvik.system.NativeStart.main(Native Method)
03-23 00:13:13.743: W/dalvikvm(9879): threadid=10: spin on suspend #3 threadid=1 (pcf=0)
03-23 00:13:13.743: I/dalvikvm(9879): "Thread-10" prio=5 tid=10 RUNNABLE
, что в конечном итоге приводит к "Фатальному вращению при приостановке: сброс потоков"
Я думаю, что это вызов getObjectMethod, так как я положилВойдите прямо перед циклом for и после первых данных.Любая помощь ??