C语言中如何调用java接口,并举例说明
时间: 2024-05-01 08:22:25 浏览: 95
在C语言中调用Java接口需要使用Java Native Interface (JNI)技术。下面是一个简单的示例,展示了如何在C代码中调用Java方法。
1. 编写Java类和方法
```java
public class HelloWorld {
public static void printMessage(String message) {
System.out.println(message);
}
}
```
2. 使用Java编译器将Java类编译为字节码文件
```shell
javac HelloWorld.java
```
3. 使用Java虚拟机将字节码文件打包成动态链接库
```shell
javah -jni HelloWorld
gcc -shared -fpic -o libhelloworld.so HelloWorld.c -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux
```
4. 在C代码中加载动态链接库并调用Java方法
```c
#include <jni.h>
int main() {
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=./";
vm_args.version = JNI_VERSION_1_8;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_FALSE;
JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
jclass helloWorldClass = (*env)->FindClass(env, "HelloWorld");
jmethodID printMessageMethod = (*env)->GetStaticMethodID(env, helloWorldClass, "printMessage", "(Ljava/lang/String;)V");
jstring message = (*env)->NewStringUTF(env, "Hello, World!");
(*env)->CallStaticVoidMethod(env, helloWorldClass, printMessageMethod, message);
(*jvm)->DestroyJavaVM(jvm);
return 0;
}
```
此示例加载了动态链接库`libhelloworld.so`并使用JNI调用了Java方法`HelloWorld.printMessage("Hello, World!")`。
阅读全文