JNI和事件功能



在我的JNI项目中,我需要将事件/回调添加到将从本机库接收此事件的java客户端。在c++中,我是这样做的:

基于对话框:

SetProcessEventCallback((ProcessEvent) KSampleDlg::OnProcessEvent, this);
void KSampleDlg::OnProcessEvent(float fPercent, float fDeviceBuffer, float fCache, double dBytesWritten, double dImageSize, KSampleBurnDlg *pDlg) 
{
pDlg->SetProgress((int)fPercent, (int)fCache);
}

控制台中的应用程序它的工作原理类似

SetProcessEventCallback(OnProcess, 0);
void OnProcess(float fPercent, float fDeviceBuffer, float fCache, 
double dBytesWritten, double dImageSize, void *pUserData)
{
static int nChars = 0;
g_cOutputLock.Lock();
while( (fPercent/100.0)*80 > nChars )
{
g_strBuffer += _T("*");
nChars++;
}
g_cOutputLock.UnLock();
}

设置此事件回调后,库将向给定函数激发此事件。我可以在本机lib中设置函数和回调,但我不知道如何将其发送到java应用程序。任何人都可以给我一个如何处理JNI的提示吗?

在C++端,使用管道(2(创建一对文件描述符。然后只需将更新写入写入端,完成后关闭。

在Java端,获取读取端的文件描述符(例如通过JNI传递(。让Java在/dev/fd/X上打开一个InputStream,并在一个单独的线程中读取直到EOF。

最新更新