我有一个Java程序,主要是图形用户界面,它表明写入到从C ++命令行工具的XML文件中的数据。 现在我想将按钮添加到Java程序来刷新数据。 这意味着,我的程序必须调用C ++功能。
是刚刚从Java通过系统调用调用程序的最佳方式? C ++的程序会被编译为Mac OS和Windows,并应始终在同一个目录下java程序。
我想生成一个可执行文件可以在C程序存储在罐内,并从我的节目叫什么?
我有一个Java程序,主要是图形用户界面,它表明写入到从C ++命令行工具的XML文件中的数据。 现在我想将按钮添加到Java程序来刷新数据。 这意味着,我的程序必须调用C ++功能。
是刚刚从Java通过系统调用调用程序的最佳方式? C ++的程序会被编译为Mac OS和Windows,并应始终在同一个目录下java程序。
我想生成一个可执行文件可以在C程序存储在罐内,并从我的节目叫什么?
假设没有更好的沟通方法是可用(SOAP,ICE,插座等),我会打电话给使用可执行Runtime.exec()
JNI可用于直接连接,但我不会推荐它。 不,你不能把一个可执行的JAR。 那么你可以,但你不能运行它,因为shell不知道如何运行它。
如果你有机会获得代码,并要与外部程序的“互动”的经验(如拨打电话,得到的结果,使更多的调用),调查JNI,它可以让你从Java应用程序由包括调用C或C ++代码&链接JNI汁C或C ++与App。
看到:
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本地访问API(JNA) 。
要回答你的最后一个问题,你不能从你的罐子中运行的可执行文件。
但是,您可以存储在您的罐子内,并在运行之前它解压到一个临时目录/文件(检查是否有其存在的第一时间,必要时提取)。 这将在一定程度简化您的分布,您只有罐子分发,并确保你正在运行符合您的震动Java代码的可执行文件。