2016-12-31 1 views
0

C++로 JNI를 사용하고 있습니다. 하지만이 오류가 나타납니다 : Class not found!. 나는 다른 해결책을 찾았지만 나를 위해 일하지는 않았다.
Code.java :JNI : 클래스를 찾을 수 없거나 FindClass가 NULL을 반환합니다.

package com.xxx; 

public class Code 
{ 
    public void getMessage() 
    { 
    System.out.println("Hello World!"); 
    } 
} 

MAIN.CPP : 내 파일에 대한

#include <jni.h> 
#include <iostream> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    JavaVM* jvm; 
    JNIEnv* env; 
    JavaVMInitArgs jvm_args; 
    JavaVMOption options[1]; 

    options[0].optionString = "-Djava.class.path=myclasses"; 
    jvm_args.version = JNI_VERSION_1_2; 
    jvm_args.options = options; 
    jvm_args.nOptions = 1; 
    jvm_args.ignoreUnrecognized = JNI_TRUE; 

    jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &jvm_args); 
    if (res < 0) 
    { 
    cout << "Cannot create JVM!\n"; 
    exit(1); 
    } 

    jclass class_ = env->FindClass("com/xxx/Code"); 
    if (class_ == 0) 
    { 
    cout << "Code class not found!\n"; 
    exit(1); 
    } 

    jmethodID method_id = env->GetMethodID(class_, "getMessage", "()V"); 
    if (method_id == 0) 
    { 
    cout << "getMessage() method not found!\n"; 
    exit(1); 
    } 

    env->CallVoidMethod(class_, method_id); 

    return 0; 
} 

디렉토리 :
Directory

나는 -Djava.class.path=myclasses/com/xxxenv->FindClass("Code"); 시도 . 또한 -Djava.class.path=myclassesenv->FindClass("com/xxx/Code");을 시도했습니다. 그러나 둘 다 작동하지 않습니다. Code class not found!의 이유는 무엇입니까?

+0

javac를 사용하여 Code.java를 컴파일 했습니까? – Calculator

+0

javac로 Code.java를 컴파일했습니다. 그러나 결과는 같습니다. –

+2

main을 실행할 때 myclasses가 작업 디렉토리에 있는지 확인 하시겠습니까? – Calculator

답변

1

처음에는이 내용을 주석에 넣었지만 포스터는 이것이 해결책이라는 것을 나타냅니다.

코드에서 "myclasses"는 C++ 프로그램의 CWD 아래에있는 폴더라고 가정합니다. 디렉토리 구조가 올바른 것처럼 보이지만 CWD가 "myclasses"의 부모가 아니면이 기능은 작동하지 않습니다. getcwd()의 반환을 인쇄하여 현재 위치를 확인하십시오.

관련 문제