Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用c++;来自java的功能 我有一个java程序,主要是GUI,它显示了从C++命令行工具写入XML文件的数据。现在我想在java程序中添加一个按钮来刷新数据。这意味着我的程序必须调用C++函数。p>_Java_C++_Jar_Java Native Interface_System Calls - Fatal编程技术网

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

如何调用c++;来自java的功能 我有一个java程序,主要是GUI,它显示了从C++命令行工具写入XML文件的数据。现在我想在java程序中添加一个按钮来刷新数据。这意味着我的程序必须调用C++函数。p>,java,c++,jar,java-native-interface,system-calls,Java,C++,Jar,Java Native Interface,System Calls,通过系统调用从java调用程序是最好的方法吗? C++程序将被编译为Mac OS和Windows,并且应该总是在同一个java程序目录中。p> 我想生成一个可执行文件c程序是否可以存储在jar中并从我的程序中调用?如果您可以访问代码并希望与外部程序进行“交互”体验(例如,进行调用、获取结果、进行其他调用),请调查JNI,它允许您通过java和C++应用程序将C++或C++代码包括和连接到.c/c++应用程序中。 见: 如果您真的只需要“启动应用程序并获取结果”之类的解决方案,请查看Runti

通过系统调用从java调用程序是最好的方法吗? C++程序将被编译为Mac OS和Windows,并且应该总是在同一个java程序目录中。p>
我想生成一个可执行文件c程序是否可以存储在jar中并从我的程序中调用?

如果您可以访问代码并希望与外部程序进行“交互”体验(例如,进行调用、获取结果、进行其他调用),请调查JNI,它允许您通过java和C++应用程序将C++或C++代码包括和连接到.c/c++应用程序中。 见:

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

见:


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

您可能还想看看。

要回答您的最后一个问题,您不能从jar中运行可执行文件


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

JNI有什么问题?它的存在是有原因的,从性能上来说,它肯定比启动单独的进程要好得多。JNI的问题是,如果你犯了错误,你的JVM很容易崩溃。就像在“segfault:代码转储”中一样。@Pavel:便携性差,稳定性差,耦合更紧密,我曾经做过类似的事情。工作得很好,但我不确定如果您的程序需要在不同的平台上工作是否会有困难。