【发布时间】:2022-06-19 06:01:46
【问题描述】:
我有下面的 Java 代码:
public class JavaToC {
protected void hereIsYourCallback(long l, double d, boolean b, Object obj) {
// this should be implemented by subclasses
}
public void start() {
try {
while(true) {
Thread.sleep(5000);
hereIsYourCallback(3L, Math.PI, true, "Hello from Java!");
}
} catch(InterruptedException e) {
// NOOP
} catch(Exception e) {
e.printStackTrace();
}
}
}
是否可以编写一个 C++ 代码,以某种方式将每个 JVM 调用捕获到hereIsYourCallback?请注意,此回调必须来自通过 JNI_CreateJavaVM 实例化的嵌入式 JVM。
【问题讨论】:
-
当然,只需提供一个派生自
JavaToc的类,将hereIsYourCallback()声明为native,并提供您自己的实现。 -
好的,但是我是通过 Java 启动我的 C++ 应用程序(通过命令行启动 JVM)还是通过 C++ 可执行文件启动我的 C++ 应用程序(通过
JNI_CreateJavaVM实例化 JVM ) ??? -
这听起来像是使用 JavaCPP 之类的工具更容易实现,它可以生成您需要的所有 JNI 代码:github.com/bytedeco/javacpp#creating-callback-functions