C ++应用程序可以使用JNI加载.jar文件吗?

谢谢你看看问题。 我试图使用JNI接口调用类文件中的java方法。 反过来,被调用的类文件应该执行另一个驻留在同一个目录中的.jar文件? 我很难实现这一点,但我没有成功执行.jar文件。 我的意思是我无法从.jar文件中获得类fuile的结果。

任何人都可以解释一下,是否可以这样做,或者我应该寻找另一种选择?

代码是这样的:

class JNIInterface { private: JavaVMInitArgs vm_args; JavaVM *jvm; JNIEnv *env; long result; jmethodID mid; jfieldID fid; jobject jobj; jclass cls; int asize; char JVMOptionString[20]; char className[20]; char methodName[20]; JavaVMOption options[1]; public: JNIInterface(char* JVMOptionString) { // JavaVMOption options[1]; options[0].optionString = JVMOptionString; vm_args.options = options; vm_args.nOptions = 1; vm_args.version = JNI_VERSION_1_6; vm_args.ignoreUnrecognized = JNI_FALSE; } void setClassName(char* className) { result = JNI_CreateJavaVM( &jvm,(void **)&env, &vm_args); if(result == JNI_ERR ) { printf("Error invoking the JVM\n"); //return 0; } cls = env->FindClass("F2C"); if( cls == NULL ) { printf("can't find class F2C\n"); //return 0; } env->ExceptionClear(); } void setMethodName(char* methodName) { cout<<"---------- Function Name is "<<methodName<GetStaticMethodID(cls, methodName, "([Ljava/lang/String;)V"); if (mid != NULL) { env->CallStaticVoidMethod(cls,mid,"70"); } int main() { JNIInterface JNIInterfaceObj("-Djava.class.path=C:\\MyPOC;C:\\MyPOC\\herong.jar"); JNIInterfaceObj.setClassName("F2C"); JNIInterfaceObj.setMethodName("main"); return 0; } 

 //The java file which is calling jar files is - F2C.java /** * F2C.java * Copyright (c) 2006 by Dr. Herong Yang, http://www.herongyang.com/ */ import herong.TempratureConvertorBean; public class F2C { public void test(String[] arg) { try { double f = 0.0; System.out.println("Inside test func:"); TempratureConvertorBean b = new TempratureConvertorBean(); if (arg.length>0) f = Double.parseDouble(arg[0]); b.setFahrenheit(f); double c = b.getCelsius(); System.out.println("Fahrenheit = "+f); System.out.println("Celsius = "+c); System.out.println(b.getInfo()); } } public static void main(String[] arg) { F2C f2c = new F2C(); f2c.test(arg); } } 

这个F2C.java使用herong.jar文件

如果您有任何想法,请建议。 谢谢,Asg

你的问题不完全清楚,但我会给出一般答案……

在Java中,只有两种方法可以让Java在.jar文件中查找(并且它们最终归结为一种方式),那就是在类路径中指定.jar文件,或者创建一个将使用的类加载器查看该jar文件并将其添加到Java将使用的类加载器列表中。

当然,所有类路径都是一组Java实例化并在程序启动之前使用的类加载器。

因此,如果JNI程序需要Java开始查找其他.jar文件,那么JNI程序需要进行Java调用(我现在不想查看)来设置新的类加载器并让Java开始使用它。