c++ 에서 JNI 사용해서 Java 메소드 불러올때 findclass 결과가 0입니다

조회수 1685회
    JavaVMOption options;
    JavaVMInitArgs vm_args;
    JNIEnv* env;
    JavaVM* jvm;
    long status;

    options.optionString = "-Djava.class.path=D:\\DEV\\javaworkspace\\Open";
    vm_args.version = JNI_VERSION_1_8;
    vm_args.nOptions = 1;
    vm_args.options = &options;

    status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

    jclass cls;
    jmethodID method;

    if (status != JNI_ERR)
    {
        cls = env->FindClass("Open");    // class를 찾아 jclass를 생성한다.

        if (cls != 0)
        { 
            method = env->GetStaticMethodID(cls, "openFile", "(Ljava/lang/String;ILjava/lang/String;)V");
            if(method != 0)
            {
                jstring method_args0 = env->NewStringUTF("");  // path
                jint method_args1 = 0;  // pageIndex
                jstring method_args2 = env->NewStringUTF("");  // search term
                env->CallStaticVoidMethod(cls, method, method_args0, method_args1, method_args2);
            }

        }
        else
        {
            AfxMessageBox(_T("클래스를 찾을 수 없습니다."));
            return;
        }

        jvm->DestroyJavaVM();
    }

Open 이라는 클래스에 있는 openFile(String path, int index, String term) 메소드를 불러오려고 하는데 Findclass("Open") 했을 때 클래스를 찾을 수 없습니다. Findclass("java/lang/String") 으로 테스트했을 때 결과가 잘 반환되는걸 보면 Open클래스파일의 경로가 문제인 것 같기도 한데요..도와주세요 (클래스파일은 D:\DEV\javaworkspace\Open\src\mv 내에 존재합니다.)

  • Open 클래스의 패키지명은 뭔가요? 정영훈 2018.12.4 17:03
  • 아 패키지명은 mv이고 FindClass("mv/Open") 으로 해야된다는 거 찾아서 그렇게 하고있습니다. 근데 그렇게 해줘도 java/lang/NoClassDefFoundError: java/lang/Object 이 에러가 납니다.. 권혜진 2018.12.4 17:15
  • "-Djava.class.path=D:\\DEV\\javaworkspace\\Open" 가 아니라-Djava.class.path=D:\\DEV\\javaworkspace\\Open\\src 가 되어야 합니다. 그런데 이곳에 class 가 존재하는 mv 디렉토리가 있는거죠? 클래스패스를 공부해보세요-.- 정영훈 2018.12.4 18:19

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)