2013-02-18 95 views
0

我从我的JAVA应用程序中调用长时间运行的JNI方法。 JNI-方法做了几件事情,我希望在每一步之后都得到状态消息。从JNI返回状态信息到JAVA

我有这个JNI - 摘录:

JNIEXPORT void JNICALL Java_my_package_Engine_start(JNIEnv * env, jclass class, jstring address, jstring file) { 
    longRunningMethod1(); 
    // notify java that method 1 is finished 

    longRunningMethod2(); 
    // notify java that method 2 is finished 

    longRunningMethod3();  
} 

和我打电话的方法是这样的:

Engine.start(param1, param2); 

此方法一直阻塞在JNI一切都完了 - 这是好的,但现在我想获得&处理状态信息。

也许类似puts()会有帮助吗?

+1

难道你不能将你的JNI方法分成多个小的方法,并处理你的应用程序中的调用之间更新的进度? – 2013-02-18 08:58:42

+0

这可以以任何方式工作,但这将是一个重大变化。 JNI方法在多个线程中建立与其他系统的连接,并且如果这些连接成功与否,我希望获得信息。 – 2013-02-18 09:00:54

+0

做了重大更改并正确地解决了您的问题,而不是随便乱动。长远来看,您将节省时间。 – 2013-02-18 09:02:43

回答

0

我这样做是为“安德烈亚斯Grapentin”提到:

你不能分割你的JNI方法为多个较小的和处理 在您的应用程序调用之间更新的进展如何?

这里真的没有问题,并且像魅力一样工作。谢谢!

1

通知Java方面的一种方法是调用方法。

对于可重复使用的解决方案,将通知定义为接口中的方法。修改本地方法,以便它接受实现该接口作为参数的对象。当需要通知Java方有趣的事时,请在该对象上调用适当的方法。

如果你关心设计模式,这基本上是strategy pattern