【问题标题】:Return status-infos from JNI to JAVA从 JNI 返回状态信息到 JAVA
【发布时间】:2023-03-06 00:56:02
【问题描述】:

我正在从我的 JAVA 应用程序中调用一个长时间运行的 JNI 方法。 JNI 方法做了几件事,我想在每一步之后得到一个状态消息。

我有这个 JNI-sn-p:

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() 这样的东西会有所帮助?

【问题讨论】:

  • 您不能将您的 JNI 方法拆分为多个较小的方法并处理应用程序中调用之间更新的进度吗?
  • 这可以以任何方式工作,但这将是一个重大变化。 JNI 方法在多个线程中建立与其他系统的连接,如果这些连接成功与否,我想获取信息。
  • 进行重大更改并正确解决您的问题,而不是在那时破解您的方式。从长远来看,您将节省时间。
  • 如果最后没有更好的解决方案,我会尝试。

标签: java c java-native-interface


【解决方案1】:

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

对于可重用的解决方案,将通知定义为接口中的方法。修改本机方法,使其接受实现接口的对象作为参数。当需要通知 Java 方面发生了有趣的事情时,调用该对象的适当方法。

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

【讨论】:

    【解决方案2】:

    我是按照“Andreas Grapentin”所说的那样做的:

    您不能将您的 JNI 方法拆分为多个较小的方法并处理 您的应用中的调用之间的进度更新了吗?

    这里真的没问题,就像一个魅力。谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2010-12-09
      • 2012-02-28
      • 1970-01-01
      • 2011-10-10
      • 2012-01-11
      • 1970-01-01
      相关资源
      最近更新 更多