要在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方法并傳遞字符串參數。您可以根據需要修改代碼以傳遞其他類型的參數。