Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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
在Java中调用C程序_Java_C_Call - Fatal编程技术网

在Java中调用C程序

在Java中调用C程序,java,c,call,Java,C,Call,我知道已经有一些关于这方面的帖子了,但是没有一个能回答我的问题 在这种情况下,我用C编写了程序,但我用java开发了GUI。所以我需要做的是,当我点击按钮或组合框时调用我的C程序 为了做到这一点,是否可以只编译C程序,然后在java接口中调用它?(如果可能,我该怎么做?) 或者我必须使用JNI吗?(我读过一些关于它的帖子,但仅仅为一个项目学习它似乎相当复杂)。要获得最大的互操作性,您应该使用JNI,但作为一种简单的方法,只需编译C代码并使用Runtime.getRuntime().exec()从

我知道已经有一些关于这方面的帖子了,但是没有一个能回答我的问题

在这种情况下,我用C编写了程序,但我用java开发了GUI。所以我需要做的是,当我点击按钮或组合框时调用我的C程序

为了做到这一点,是否可以只编译C程序,然后在java接口中调用它?(如果可能,我该怎么做?)


或者我必须使用JNI吗?(我读过一些关于它的帖子,但仅仅为一个项目学习它似乎相当复杂)。

要获得最大的互操作性,您应该使用JNI,但作为一种简单的方法,只需编译C代码并使用
Runtime.getRuntime().exec()从JAVA调用C可执行文件即可

如果您在UNIX下阅读响应,则可以执行以下操作:

String line;
Process p = Runtime.getRuntime().exec( "/path/to/C/executable" );

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = in.readLine()) != null) {
    System.out.println(line);
}
in.close();

是的,您必须使用JNI从Java调用本机方法如果您需要C代码与Java程序进行互操作,那么使用JNI(或JNA)是正确的解决方案。如果您只想启动一个编译过的程序,那么您可能会通过系统命令执行它(注意,这可能会导致许多其他问题),这不会很好地结束。你应该更仔细地考虑这个问题。将C程序移植到Java。是时候。你会省去很多心痛的。重复使用C可执行文件所带来的“节省”不值得这么辛苦。谢谢,但我将使用Runtime.getRuntime().exec(),我认为如下所述。这是学校的一个项目,我们完成了教授给出的C文件,我知道使用JNI会更好,但我没有时间这么做。此外,我甚至不知道C文件中使用的每一个函数,所以我不认为我能够在Java中移植它。听起来你的教授好像被困在1990年了。太糟糕了。Runtime.exec很久以前就被淘汰了。@VGR是的,对不起……我上次使用Java已经有一段时间了。。。如果你愿意,你可以编辑我的答案