我有一个主要是 GUI 的 Java 程序,它显示从 c++ 命令行工具写入 xml 文件的数据。现在我想在java程序中添加一个按钮来刷新数据。这意味着我的程序必须调用 c++ 功能。
通过系统调用从java调用程序的最佳方法是什么?c++ 程序将针对 mac os 和 windows 进行编译,并且应始终与 java 程序位于同一目录中。
我想生成一个可执行文件可以将c程序存储在jar中并从我的程序中调用吗?
我有一个主要是 GUI 的 Java 程序,它显示从 c++ 命令行工具写入 xml 文件的数据。现在我想在java程序中添加一个按钮来刷新数据。这意味着我的程序必须调用 c++ 功能。
通过系统调用从java调用程序的最佳方法是什么?c++ 程序将针对 mac os 和 windows 进行编译,并且应始终与 java 程序位于同一目录中。
我想生成一个可执行文件可以将c程序存储在jar中并从我的程序中调用吗?
如果您可以访问代码并希望获得与外部程序的“交互”体验(例如,进行调用、获取结果、进行其他调用),请研究 JNI,它允许您从 Java 应用程序调用 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
假设没有更好的通信方法可用(SOAP、ICE、套接字等),我会使用Runtime.exec()
. JNI 可以直接用于接口,但我不推荐它。不,您不能将可执行文件放入 jar 中。好吧,你可以,但你不能运行它,因为 shell 不知道如何运行它。
您可能还想查看Java Native Access API (JNA)。
要回答您的最后一个问题,您不能从 jar 中运行可执行文件。
但是,您可以将其存储在 jar 中并在运行之前将其解压缩到临时目录/文件(第一次检查它的存在并在必要时解压缩)。这将在一定程度上简化您的分发,因为您只有要分发的 jar,并确保您运行的可执行文件与您的 jarred Java 代码相匹配。