我想从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