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

Popular posts from this blog

shopping cart - Page redirect not working PHP -

php - How to modify a menu to show sub-menus -

python - Installing PyDev in eclipse is failed -