如何调用 JAR 文件:安装 JDK 并编写 JNI 头文件编译头文件生成 JNI 库加载 JNI 库并获取 JNI 函数指针调用 JNI 函数并传递 Java 数据处理结果并进行类型转换释放 JNI 库以避免内存泄漏

如何在 Go 中调用 JAR 文件
在 Go 中调用 Java 应用程序可以通过 Java Native Interface (JNI) 来实现。JNI 是一种 C 语言接口,允许其他编程语言与 Java 虚拟机 (JVM) 进行交互。
步骤:
- 安装 Java 开发工具包 (JDK):确保系统中安装了 JDK,因为 JNI 需要 Java 运行时库。
-
编写 JNI 头文件:创建包含 JNI 函数声明的
.h头文件。JNI 函数用于在 Go 和 Java 代码之间传递数据。 -
生成 JNI 库:使用 Java Native Interface Compiler (javac) 编译头文件生成 JNI 库(
.dll或.so文件)。 -
从 Go 中加载 JNI 库:使用
dlopen函数从 Go 中加载 JNI 库。 -
获取 JNI 函数指针:使用
dlsym函数获取 JNI 函数的指针。 - 调用 JNI 函数:使用获取的指针调用 JNI 函数,传入和传出 Java 数据。
示例:
立即学习“go语言免费学习笔记(深入)”;
import (
"fmt"
"github.com/go-delve/delve/pkg/gojni"
)
func main() {
// 加载 JNI 库
lib, err := gojni.LoadLibrary("myJavaLib.dll")
if err != nil {
fmt.Println(err)
return
}
// 获取 JNI 函数指针
sumFuncPtr, err := lib.GetProcAddress("sum")
if err != nil {
fmt.Println(err)
return
}
// 调用 JNI 函数
result, err := gojni.CallIntMethod(sumFuncPtr, 1, 2)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(result) // 输出:3
}注意:
- Go 和 Java 数据类型之间需要转换。
- 确保 JNI 函数的签名与 Java 代码中声明的签名一致。
- 释放 JNI 库时,请调用
dlclose函数。









