아...jni때문에 힘드네요..ㅠ.ㅠ

 

jni 에서 java에서 c 함수 불러오는건 되는데.. c에서 자바 메소드 불러오는거 테스트 하다가 안되서 질문올려봅니다.

 

바로 아래있는건 자바 소스고... 자바 소스 밑에 있는 c 소스입니다.

 

뭐때문인지..폰에서 실행하니깐...바로 어플이 꺼져버리더군요..ㅠ.ㅠ 뭐 잘못된거라도 있나요??

 

c에서 이 TestCCallJava11() 함수를 실행안하면..이상없이 잘 됩니다..ㅠ.ㅠ

TestCCallJava11 여기서 뭐가 잘못된건지 좀 꼬집어주세요..ㅠ.ㅠ

 

 

package com.cocos2dx.TestJNI;

import java.io.File; 
public class TestJNI {
     public TestJNI(){
     }
     static {
           System.loadLibrary("JNITest");
     }
   
 public native void loadFile();  
  
 public void createFolder(){ 
      try{
          File file = new File("data/data/com.cocos2dx.Box2dTest/Testfolder");
          if(!file.exists())
               file.mkdir();  
           }catch (Exception e){  
           System.out.println(e);
       }     
    }
}

 

 

 

 

 

#include <jni.h>
#include <stdio.h>
#include "JNITest.h"
#include "JniTestC.h"

 

 static JavaVM *g_VM;
static jclass jNativesCls;

void TestCCallJava11();

 

JNIEXPORT void JNICALL Java_com_cocos2dx_TestJNI_TestJNI_loadFile
  (JNIEnv *env, jobject clazz){
          JniTestC* a1 = new JniTestC();
          a1->setJniTest();

          env->GetJavaVM(&g_VM);

          TestCCallJava11();

}

 

void TestCCallJava11(){
       JNIEnv *env;
       if (!g_VM)
           return;

       g_VM->AttachCurrentThreadAsDaemon(&env, NULL);


       jclass jNCls = env->FindClass("com/cocos2dx/TestJNI/TestJNI");

 

       if (jNCls == 0)
       {
              return;
        }

        jNativesCls = (jclass)env->NewGlobalRef(jNCls);

        env->DeleteLocalRef(jNCls);

        jmethodID jFinishMethodID;
        if (!jFinishMethodID) {
               jFinishMethodID = env->GetStaticMethodID(jNativesCls, "createFolder", "()V");
         }

        if (jFinishMethodID) {
              env->CallStaticVoidMethod(jNativesCls, jFinishMethodID);
          }

}