从c代码调用java

时间:2011-06-07 15:06:54

标签: java c java-native-interface

我们的编程模型是这样的:

c代码用于捕获系统的实时事件(非常频繁),java代码作为服务器运行以接收请求。当c代码捕获事件时,我们需要向java代码发送请求并等待回复。我已经尝试过JNI从c调用java,但似乎它会在运行几秒后卡住。 JNI需要初始化jvm并在类文件中搜索处理程序。在c和java之间有没有更好的通信方式?我可以将java代码编译成二进制文件并将其与c代码链接吗? 感谢

3 个答案:

答案 0 :(得分:3)

如果涉及一个很好的生产者 - 客户端/消费者 - 服务器范例,您可能希望研究使用套接字。这样,C代码在后台运行,并通过套接字连接将信息推送到Java服务,Java服务又将回复发送回C代码。您也可以考虑使用FIFO或命名管道进行通信,但是至少在本地机器上的套接字在大多数平台上都非常快速有效。

此外,如果您需要以这种方式工作,Java服务可以在启动时启动C代码,反之亦然(即,C代码可以分离VM并启动Java服务)。

答案 1 :(得分:1)

如果Java代码作为服务器运行,您应该从C代码发送请求,它可以在不同的进程中,甚至可以在不同的机器上。我个人不会尝试直接从C代码调用Java代码,除非真的有充分的理由。

答案 2 :(得分:1)

一种选择是在单独的进程中运行Java应用程序,并使用Java应用程序和C数据收集器之间的进程间通信。

关于编译Java和链接到C,如果您的特定工具集支持它,那么这是可能的。例如,如果使用功能齐全的GNU编译器,gcc和gcj可以一起工作,但是您需要了解Java不仅仅是一种语言,它也是一种环境。对Java进行本机编译可能无法为您提供在系统中使用Java的任何理由。