java - How to add .jar dependency files in JNI C++ environment -
so, i've been trying find way run java code along dependency .jar files in visual c++ program.
i used following code run java program in c++ out problem.
java code
public class sample2 { public static int intmethod(int n) { return n*n; } public static boolean booleanmethod(boolean bool) { return !bool; } } c++ code
// 1.cpp : main project file.
#include "stdafx.h" #include "jni.h" #include <windows.h> using namespace system; int calljava() { javavm *jvm; /* denotes java vm */ jnienv *env; /* pointer native method interface */ jint square; jboolean not; javavminitargs vm_args; /* jdk/jre 6 vm initialization arguments */ javavmoption *options = new javavmoption[1]; options[0].optionstring = "-djava.class.path=c:\\javacode"; vm_args.version = jni_version_1_6; vm_args.options = options; vm_args.noptions = 1; vm_args.ignoreunrecognized = false; hinstance hinstlib; hinstlib = loadlibrary(text("c:\\program files\\java\\jdk1.6.0_45\\jre\\bin\\server\\jvm.dll")); if(hinstlib==0) { printf("error"); } if(hinstlib!= null) { typedef jint (jnicall *ptrcreatejavavm)(javavm **, void **, void *); ptrcreatejavavm ptrcreatejavavm = (ptrcreatejavavm)getprocaddress(hinstlib,"jni_createjavavm"); int res = ptrcreatejavavm(&jvm, (void**)&env, &vm_args); jclass cls = env->findclass("sample2"); jmethodid mid; if(cls !=0) { mid = env->getstaticmethodid(cls,"intmethod","(i)i"); if(mid !=0) { square = env->callstaticintmethod(cls, mid, 5); printf("result of intmethod: %d\n", square); } mid = env->getstaticmethodid(cls, "booleanmethod", "(z)z"); if(mid !=0) { not = env->callstaticbooleanmethod(cls, mid, 1); printf("result of booleanmethod: %d\n", not); } } jvm->destroyjavavm(); } else { printf("library null"); } console::read(); return 0; } int main(array<system::string ^> ^args) { calljava(); console::read(); return 0; } now, question since following java program uses few jar files directory.
java code
import javax.swing.*; import es.unex.sextante.core.sextante; import es.unex.sextante.gui.core.sextantegui; public class demo5 { public static class starter implements runnable { public void run() { sextante.initialize(); sextantegui.getguifactory().showmodelerdialog(); } } public static class gui implements runnable { public void run() { try { swingutilities.invokeandwait(new starter()); } catch (exception exc) { throw new runtimeexception(exc); } } } public static void run() { thread gui = new thread(new gui()); gui.start(); } } i able compile , run java code via command prompt using following approach:
compile: javac -cp c:\lib\sextante.jar;c:\lib\sextante_gui.jar; demo5.java
run: java -cp c:\lib\sextante.jar;c:\lib\sextante_gui.jar; demo5
however, don't know how add jar files in jni approach.
i tried following ways: a. method 1: following approach doesn't work:
javavmoption *options = new javavmoption[3]; options[0].optionstring = "-djava.class.path=c:\\javacode"; options[1].optionstring = "-djava.class.path=c:\\lib\\sextante.jar"; options[2].optionstring = "-djava.class.path=c:\\lib\\sextante_gui.jar"; b. method 2: trying find jars in method call...
nothing works fine yet. please me solve problem?
thanks.
the code:
javavmoption *options = new javavmoption[3]; options[0].optionstring = "-djava.class.path=c:\\javacode"; options[1].optionstring = "-djava.class.path=c:\\lib\\sextante.jar"; options[2].optionstring = "-djava.class.path=c:\\lib\\sextante_gui.jar"; would converted command
java.exe -djava.class.path=c:\javacode -djava.class.path=c:\lib\sextante.jar -djava.class.path=c:\lib\sextante_gui.jar
what want is:
javavmoption *options = new javavmoption[1]; options[0].optionstring = "-djava.class.path=c:\\javacode;c:\\lib\\sextante.jar;c:\\lib\\sextante_gui.jar"; which gets converted to
java.exe -djava.class.path=c:\javacode;c:\lib\sextante.jar;c:\lib\sextante_gui.jar
Comments
Post a Comment