c++ 에서 JNI 사용해서 Java 메소드 불러올때 findclass 결과가 0입니다
조회수 1688회
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 내에 존재합니다.)
1 답변
-
클래스패스 문제일 확률이 큽니다.
https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html
을 보시고
JavaVMOption 에 classpath 을 설정해주세요.
options[0].optionString = "-Djava.class.path=D:\DEV\javaworkspace\Open\src";
을 참고하세요.
댓글 입력