要在C++中调用Java方法并传递参数,您需要使用Java Native Interface (JNI)。JNI允许C++代码与Java代码进行交互。以下是一个简单的示例,展示了如何在C++中调用Java方法并传递参数。
首先,创建一个Java类,例如MyClass.java
:
public class MyClass { public String myMethod(String input) { return "Hello from Java! Input: " + input; } }
接下来,使用javac
编译此Java文件,并使用javah
生成JNI头文件:
javac MyClass.java javah -jni MyClass
现在,您可以编写一个C++文件(例如main.cpp
),并使用生成的JNI头文件调用Java方法:
#include#include #include "MyClass.h" int main() { // 加载Java虚拟机 JavaVM* jvm; JNIEnv* env; JavaVMOption options; options.optionString = "-Djava.class.path=./"; JNI_CreateJavaVM(&jvm, (void**)&env, &options); // 获取Java类 jclass cls = env->FindClass("MyClass"); if (cls == nullptr) { std::cerr << "Cannot find class MyClass" << std::endl; return 1; } // 获取Java方法ID jmethodID mid = env->GetMethodID(cls, "myMethod", "(Ljava/lang/String;)Ljava/lang/String;"); if (mid == nullptr) { std::cerr << "Cannot find method myMethod" << std::endl; return 1; } // 创建Java字符串参数 jstring input = env->NewStringUTF("World"); // 调用Java方法并获取结果 jobject result = env->CallObjectMethod(cls, mid, input); // 将Java字符串转换为C++字符串 const char* resultStr = env->GetStringUTFChars(result, nullptr); std::cout << "Result from Java method: " << resultStr << std::endl; // 释放资源 env->ReleaseStringUTFChars(result, resultStr); env->DeleteLocalRef(result); env->DeleteLocalRef(cls); jvm->DestroyJavaVM(); return 0; }
编译并运行此C++文件:
g++ -o main main.cpp -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -L${JAVA_HOME}/jre/lib/amd64/server -ljvm ./main
这将输出:
Result from Java method: Hello from Java! Input: World
这个示例展示了如何在C++中调用Java方法并传递字符串参数。您可以根据需要修改代码以传递其他类型的参数。