要在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 <iostream>
#include <jni.h>
#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方法并传递字符串参数。您可以根据需要修改代码以传递其他类型的参数。