所以我有这个程序,当我的应用程序运行时,我不断从我的JNI函数(在C ++中)检索数据,我在JNI函数中检索这些数据。 但是我想将数据传递给处理这些输入值(例如x和y值)的Java类。
在应用程序运行时,如何将数据不断传递给Java类?
任何帮助将不胜感激
答案 0 :(得分:0)
那么您有一个Java应用程序调用了JNI库中的一个函数,而该函数又启动了另一个线程,该线程需要定期将数据发送回Java?
假设是这种情况:
选项1为invocation API:JNI_GetCreatedJavaVMs
将为您提供现有VM的句柄,您可以从那里继续。附加新线程后,可以调用静态方法(FindClass
/ GetStaticMethodID
/ Call<type>Method
),也可以调用对象中的方法(GetObjectClass
/ {{1 }} / GetMethodID
)。您必须在上一个调用中从Java中传递对象,并将其保留在全局引用中。
选项2为JNA:如果您的库由于某些其他原因不必成为JNI库,则可以将其设置为“常规”库并通过JNA对其进行调用。 JNA支持通过Call<type>Method
类将函数指针传递给本机函数。然后,您可以从新线程调用此回调。