c/c++语言开发共享从C语言调用Java函数

我想从c代码调用java函数。 我在https://www.ishaanguliani.com/content/calling-java-functions-c-linux-ubuntu-jni的示例中讨论过JNI 。

我使用相同的代码并遵循相同的步骤,但我无法找到类打印。

我调试但我没找到我做错了什么。

在这里分享我的代码

unions@universe:~/uni_tmp/jni/vvn$ cat MyC.c #include  #include  #include "MyJava.h" #include  JNIEnv* create_vm(JavaVM ** jvm) { JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption options; options.optionString = "-Djava.class.path=./"; //Path to the java source code vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6 vm_args.nOptions = 1; vm_args.options = &options; vm_args.ignoreUnrecognized = 0; int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args); if(ret FindClass(env,"MyJava"); if (clsJava != NULL) { printf("n Able to find the requested classn"); } else { printf("n Unable to find the requested classn"); return 0; } mainMethod = (*env)->GetStaticMethodID(env, clsJava, "main", " ([Ljava/lang/String;)V"); smfnMethod = (*env)->GetStaticMethodID(env, clsJava,"sampleStaticFunc", "(Ljava/lang/String;)V"); if (mainMethod != NULL) { printf("n Calling the Java Main method"); (*env)->CallStaticVoidMethod(env, clsJava, mainMethod, NULL); } StringArg = (*env)->NewStringUTF(env, "Argument from C"); if (smfnMethod != NULL) { printf("n Calling the Static Function method"); (*env)->CallStaticVoidMethod(env, clsJava, smfnMethod, StringArg); } printf("n End C main n"); return 0; } 

Java代码

 cat unions@universe:~/uni_tmp/jni/vvn$ cat MyJava.java public class MyJava { public MyJava() { System.out.println("n Inside the constrcutor of Java Function n "); } private void sampleFunc(String str) { System.out.println("n Inside sampleFunc value of string = " + str); } public static void sampleStaticFunc(String str) { System.out.println("n Inside static sampleFunc value of string = " + str); } public static void main(String[] args) { MyJava obj = new MyJava(); obj.sampleFunc("Ishaan is my name"); System.out.println("n Calling Java from C function n"); } } 

在那之后Ran这些命令

 unions@universe:~/uni_tmp/jni/vvn$ javac MyJava.java unions@universe:~/uni_tmp/jni/vvn$ javah -jni MyJava 

当我编译和然后我得到了这个输出

 export LD_LIBRARY_PATH=/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/server unions@universe:~/uni_tmp/jni/vvn$ gcc -I /usr/lib/jvm/java-6-openjdk-amd64/include -I /usr/lib/jvm/java-6-openjdk-amd64/include/linux -L /usr/bin/java -L /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/server MyC.c -ljvm ; ./a.out Unable to find the requested class 

我哪里做错了?

我将options.optionString更改为这样

 options.optionString = "-Djava.class.path=/home/vpraveen/uni_tmp/jni/vvn"; 

即使输出没有变化。 有什么建议?

    我通过将我的课程变成我自己的包来解决这个问题。 当我们没有定义任何包时,它将作为默认包。 所以我创建了自己的包这样的东西

     package com.aqu.vvn 

    我知道它的解决方法,但这样做对我有用。 当我想出来时,我会让你知道确切的方法。

      以上就是c/c++开发分享从C语言调用Java函数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541749.html

      (0)
      上一篇 2021年1月4日
      下一篇 2021年1月4日

      精彩推荐