C++应用程序是否可以加载。使用JNI的jar文件?

 2023-01-20    261  

问题描述

感谢您查看问题.
我正在尝试使用JNI接口中的类文件中调用Java方法.反过来,应在同一目录中驻留的另一个.jar文件?我很难实现这一目标,并且在执行.jar文件方面没有成功.我的意思是我无法从.jar文件中可用的类fuile获得结果.

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

C++应用程序是否可以加载。使用JNI的jar文件?

代码是这样的:

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<<endl;

  //----------  Integer Value with Parameter ----------------
  mid=env->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文件中查看(并且最终它们确实归结为一种方式),这就是指定class Pather中的.jar文件或创建一个.jar文件或创建一个. classloader将在该JAR文件中查看并将其添加到Class Loaders Java列表中.

,当然,所有的classpath都是一组classloaders,java启动和使用之前,它们甚至可以启动.

因此,JNI程序需要进行Java调用(我现在不抬头)来设置一个新的类加载程序,并在JNI程序需要JAVA开始附加查找的情况下,让Java开始使用Java.罐子文件.

以上所述是小编给大家介绍的C++应用程序是否可以加载。使用JNI的jar文件?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26059.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。