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

是通过系统调用从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代码相匹配的可执行文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top