今日、私はCルーチンによってJavaメソッドを呼び出すためのタスクを取得します。現在、Javaメソッドを呼び出している場所からJavaによってACルーチンを呼び出していますが、致命的なエラーが発生しました
#A fatal error has been detected by the Java Runtime Environment:
# SIGSEGV (0xb) at pc=0x00002b170bae1d66, pid=10052, tid=47378050390336
JRE version: 7.0_21-b11
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.21-b01 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libHelloImpl.so+0xd66] process_message+0xdb
#
Javaメソッドを呼び出すための私のコードは
JNIEXPORT Java_com_example_mail_MailProcessingEngine_intializeMTADequeueDaemon(JNIEnv *jniEnv, jobject obj)
{
jclass mailProcessingClass;
jmethodID callingMethod;
jobjectArray applicationArgs;
jstring applicationArg0;
mailProcessingClass = (*jniEnv)->FindClass(jniEnv, "com/example/mail/MailProcessingEngine");
printf("\nhelloWorldClass-%d",mailProcessingClass);
callingMethod = (*jniEnv)->GetStaticMethodID(jniEnv,mailProcessingClass, "processMail", "(I)I");
printf("\nmainMethod-%d",callingMethod);
if (callingMethod == 0) {
printf("Could not find Method\n");
}else{
printf("FInd Method");
}
int isSuccess = (*jniEnv)->CallStaticIntMethod(jniEnv, mailProcessingClass, callingMethod, 6);
printf("IsSuccess - "+isSuccess);
}
私のJavaクラスは
package com.example.mail;
public class MailProcessingEngine {
public native void intializeMTADequeueDaemon();
static { System.loadLibrary("MailerImpl"); }
public static void main (String[] args) {
MailProcessingEngine mailProcessingEngine = new MailProcessingEngine();
mailProcessingEngine.intializeMTADequeueDaemon();
}
public static int processMail(int mailId){
System.out.println("MailId :"+mailId);
return 1;
}
}
ここで何が間違っているのか誰にも教えてもらえますか。結局のところ、jni 環境の同じ参照を使用して Java メソッドにコールバックを与えることができます。
ありがとう、アシッシュ・パネリー