在应用程序运行时将常量动态JNI数据返回到Java对象

时间:2018-07-18 21:59:55

标签: java c++ jvm java-native-interface jnienv

所以我有这个程序,当我的应用程序运行时,我不断从我的JNI函数(在C ++中)检索数据,我在JNI函数中检索这些数据。 但是我想将数据传递给处理这些输入值(例如x和y值)的Java类。

在应用程序运行时,如何将数据不断传递给Java类?

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

那么您有一个Java应用程序调用了JNI库中的一个函数,而该函数又启动了另一个线程,该线程需要定期将数据发送回Java?

假设是这种情况:

选项1为invocation APIJNI_GetCreatedJavaVMs将为您提供现有VM的句柄,您可以从那里继续。附加新线程后,可以调用静态方法(FindClass / GetStaticMethodID / Call<type>Method),也可以调用对象中的方法(GetObjectClass / {{1 }} / GetMethodID)。您必须在上一个调用中从Java中传递对象,并将其保留在全局引用中。

选项2为JNA:如果您的库由于某些其他原因不必成为JNI库,则可以将其设置为“常规”库并通过JNA对其进行调用。 JNA支持通过Call<type>Method类将函数指针传递给本机函数。然后,您可以从新线程调用此回调。