0

今日、私は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 メソッドにコールバックを与えることができます。

ありがとう、アシッシュ・パネリー

4

0 に答える 0