如何在JNI中从C向Java发送事件/信号

如何在JNI中从C向Java发送事件/信号,java,c,events,java-native-interface,signals,Java,C,Events,Java Native Interface,Signals,是否有任何机制可以通过JNI将异步事件/信号从C发送到Java或viceversa?我需要捕获从C到Java的信号/事件。您可以从C代码调用Java方法。请参阅JNI文档。另请参见。这听起来有点棘手,因为JNI被认为是单向的:Java代码可以调用本机方法,本机方法当然可以回调到Java代码中,但本身无法启动该过程 但这不是不可能的,我认为最简单的解决方案是让本机呼叫阻塞,直到收到信号为止 另一种选择是编写JVMTI代理,它可以主动干扰正在运行的VM 但是,如果我们谈论的是UNIX信号,那么您可以

是否有任何机制可以通过JNI将异步事件/信号从C发送到Java或viceversa?我需要捕获从C到Java的信号/事件。

您可以从C代码调用Java方法。请参阅JNI文档。另请参见。

这听起来有点棘手,因为JNI被认为是单向的:Java代码可以调用本机方法,本机方法当然可以回调到Java代码中,但本身无法启动该过程

但这不是不可能的,我认为最简单的解决方案是让本机呼叫阻塞,直到收到信号为止

另一种选择是编写JVMTI代理,它可以主动干扰正在运行的VM


但是,如果我们谈论的是UNIX信号,那么您可以使用现有的类来处理,而不是使用公共API(因此将来不保证使用Sun VM特定的API)。

我已经在使用这个类,但我真正需要的是,我可以在java中阻塞某些资源,然后我可以发送一个事件/信号来解除阻塞,这应该是异步的。您当然可以将环境指针与对象句柄一起放入C,然后可以简单地通知对象句柄,只要环境指针在java->function调用后仍然有效。