JNI 프로그래밍에서 c 호출 Java 구현에서 NullPointerException 문제를 물어보십시오

java 와 C++ 두 프로그래밍 언어:

1, Java 호출 C++ 로 작성된 dll, JNI 또는 Jawin 오픈 소스 프로젝트를 사용할 수 있습니다 (두 번째 방법 권장).

2, C++ 는 JNI (Java 네이티브 인터페이스) 를 통해 Java 클래스와 상호 작용하는 Java 변수, 메서드를 호출합니다.

--절차 (두 번째만 요약)----

(1) VC 6. 컴파일 C++ 프로그램, 개발 환경 설정: 도구-"옵션-"도구; Libary files 아래에서 LIB 디렉토리 c: ₩ program files ₩ Java ₩ JDK 1.5. ₩ lib 를 추가합니다. 는 exe 파일로 컴파일됩니다.

실행기 환경 설정: Path 환경 변수 추가: c: \ program files \ Java \ jdk1.5. \ JRE \ bin \ client (jvm. ) v ");

//([Ljava/lang/String; ) v 는 main () 서명

가 Java 프로그램 디렉토리에서 실행: javap -s -p ClassDemo (참고: ClassDemo.java 가 컴파일됨)

main 아래 명령문 가져오기 ) V

(3) 코드 예:

java 프로그램

import java.io.*;

public class demomain {

public static void main (string [] args) throws java.io.io exception

}

}

C++ 프로그램:

# ifndef _ _ cplusplus

# define _ _ cplusplus < p Stdio.h>

#include < Stdlib.h>

#include < Windows.h>

# pragma comment (lib, "c: \ \ program files \ \ Java \ \ jdk1.5. \ \ lib \ 4129

voidmain () {

loadlibrary ("c: \ \ program files \ \ Java \ JRE 1.5. //dll

JavaVM *jvm 동적 호출 :

JNIEnv *env;

JavaVMInitArgs vm_args;

자바 옵션 옵션 [3];

options []. optionstring = "-djava.com piler = none";

옵션 [1]. optionstring = "-djava.classpath =.";

옵션 [2]. optionstring = "-verbose: JNI";

VM _ args.version = JNI _ version _ 1 _ 4;

VM _ args.n 옵션 = 3;

vm_args.options = options;

VM _ args.ignoreunrecognized = JNI _ true;

jintres = JNI _ create javavm (& Jvm, (void**)& Env, & Vm_args); //가상 시스템 생성

if (res < ) {

fprintf (stderr, "can't create Java VM \ n");

종료 (1);

};

jclass cls = env-> FindClass("DemoMain ");

if (cls = = ) printf ("sorry, I can't find the class");

fprintf (stdout, "this is invoke simplified 4 .. \ n");

jmethodID get_main_id;

if(cls! = null)

{

get _ main _ id = env-> Getstaticmethodid (cls, "main", "([ljava/lang/string; ) v ");

fprintf (stdout, "this is invoke simplified 5 .. \ n");

if(get_main_id! = null)

{

jclassstring = env-> FindClass("java/lang/String ");

jobjectArray args = env-> New object array (, 문자열, null);

fprintf (stdout, "this is invoke simplified 6 .. \ n");

int I = env-> Callintmethod (cls, get _ main _ id, args);

fprintf (stdout, I+"this is invoke simplified 7. \ n");

}

}

jvm-> DestroyJavaVM ();

fprintf (stdout, "Java VM destory \ n");

}