如何从java调用c ++function

我有一个主要是GUI的Java程序,它显示了从c ++命令行工具写入xml文件的数据。 现在我想在java程序中添加一个按钮来刷新数据。 这意味着我的程序必须调用c ++function。

是通过系统调用从java调用程序的最佳方法吗? c ++程序将为mac os和windows编译,并且应始终与java程序位于同一目录中。

我想生成一个可执行文件,可以将c程序存储在jar中并从我的程序中调用吗?

假设没有更好的通信方法(SOAP,ICE,套接字等),我会使用Runtime.exec()调用可执行文件。 JNI可以直接用于界面,但我不推荐它。 不,你不能把一个可执行文件放在jar中。 嗯,你可以,但你不能运行它,因为shell不知道如何运行它。

如果您可以访问代码并希望获得外部程序的“交互式”体验(例如,调用,获取结果,进行其他调用),请研究JNI,它允许您通过包括从Java应用程序调用C或C ++代码并将JNI果汁与您的C或C ++应用程序相关联。

看到:

http://en.wikipedia.org/wiki/Java_Native_Interface

http://www.acm.org/crossroads/xrds4-2/jni.html

如果你真的需要一个“启动应用程序并获得结果”的解决方案,请查看Runtime.exec(),它允许您启动外部程序并捕获其输出。

请参阅: http : //www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page = 1

http://www.rgagnon.com/javadetails/java-0014.html

您可能还想查看Java Native Access API(JNA) 。

要回答最后一个问题,您无法在jar中运行可执行文件。

但是,您可以将它存储在jar中并在运行之前将其提取到临时目录/文件中(第一次检查其存在并在必要时提取)。 这将简化您的分发,因为您只需要分发jar,并确保您运行的是与您的jar代码相匹配的可执行文件。