2013-08-01 3 views
1

.jar에있는 메소드를로드하려고합니다. 다음은 코드JNI를 사용하여 C++에서 .jar 파일을로드하는 방법

JavaVMInitArgs vm_args; 
memset(&vm_args, 0, sizeof(vm_args)); 
JavaVMOption* options = new JavaVMOption[1]; 

options[0].optionString = 
     "- Djava.class.path=C:\\Users\\Desktop\\POC\\POC\\Debug\\Sample2.jar;  
vm_args.version = JNI_VERSION_1_6; 
vm_args.nOptions = 1; 
vm_args.options = options; 
vm_args.ignoreUnrecognized = 0; 
JNI_GetDefaultJavaVMInitArgs(&vm_args); 
m_Status = JNI_CreateJavaVM_ptr (&m_JVM, (void**)&m_JavaEnv, &vm_args); 

입니다하지만 사용할 때

 classForJava = m_JavaEnv->FindClass ("Sample2"); 

classForJava0가 포함되어 있습니다.

+0

m_status 란 무엇입니까? – doctorlove

답변

4

Java에서 .jar 파일을 볼 수있는 두 가지 방법은 클래스 경로에서 .jar 파일을 지정하거나 해당 jar 파일을보고 클래스 경로에 추가하는 클래스 로더를 만드는 것입니다. 자바가 사용할 클래스 로더 목록.

물론 모든 클래스 경로는 프로그램 시작 전에 Java가 인스턴스화하고 사용하는 클래스 로더 세트입니다.

그래서 JNI 프로그램은 새로운 클래스 로더를 설정하고 JNI 프로그램이 추가 .jar 파일을 찾기 시작해야하는 경우 Java를 사용하여 시작하도록 Java 호출을해야합니다.

+0

예를 들어 주시겠습니까? –

+0

이 답글은 http://stackoverflow.com/questions/2025397/can-c-application-load-the-jar-file-using-jni에서 3 년 전의 답장에서 복사하여 붙여 넣기 한 것입니다. 크레딧을 복사하고 가져 오는 대신 소스에 연결하십시오! –

0

./으로 바꾼 패키지 이름을 포함하여 클래스의 전체 이름을 지정하십시오. exampe를 들어 은 Sample2 클래스는 org.test 패키지, 그것은 오타하지만 -Djava.class.path 사이의 optionString 공간을 제거해야 할 수도 그런데 m_JavaEnv->FindClass ("org/test/Sample2");

를 사용하는 경우.

관련 문제