
【高分求教】如何在java中调用c语言程序exe
现在我有一个编好的C语言exe程序,C程序大概就是用SCANF输入输出的那种,现在我想在java里调用这个C程序编好的EXE文件(尽量不改动c程序),要求能实现java与...
现在我有一个编好的C语言exe程序,C程序大概就是用SCANF输入输出的那种,现在我想在java里调用这个C程序编好的EXE文件(尽量不改动c程序),要求能实现java与c程序的通信,可能用到线程,或者管道方面的知识把。求详解,最好有代码实例, 解决了给200分!!
举个例子: 比如c程序是求a+b=? , 我要在java里将参数a,b传递到C语言程序里, 经过C语言程序的计算,将结果返回给java程序里。 要求能够持续通信。
问题里已经说了
比如c程序是求a+b=? , 我要在java里将参数a,b传递到C语言程序里, 经过C语言程序的计算,将结果返回给java程序里。
C语言就是那种scanf, printf的 输入输出程序,计算量比较庞大,现在就是要通过java将参数传给c程序用于scanf,然后将printf的结果返回给java程序里,c程序要指定的参数很多,所以通信是不能中断c程序,还要等待java输入,说白了就是用java显示c程序运行的结果。我对java了解不是太多,大概就是这个意思,Runtime.exec也行
--》火星微生物
循环scanf,java中要多次获得c程序的运算结果,c程序也要多次获得java中的参数 展开
举个例子: 比如c程序是求a+b=? , 我要在java里将参数a,b传递到C语言程序里, 经过C语言程序的计算,将结果返回给java程序里。 要求能够持续通信。
问题里已经说了
比如c程序是求a+b=? , 我要在java里将参数a,b传递到C语言程序里, 经过C语言程序的计算,将结果返回给java程序里。
C语言就是那种scanf, printf的 输入输出程序,计算量比较庞大,现在就是要通过java将参数传给c程序用于scanf,然后将printf的结果返回给java程序里,c程序要指定的参数很多,所以通信是不能中断c程序,还要等待java输入,说白了就是用java显示c程序运行的结果。我对java了解不是太多,大概就是这个意思,Runtime.exec也行
--》火星微生物
循环scanf,java中要多次获得c程序的运算结果,c程序也要多次获得java中的参数 展开
3个回答
展开全部
用 Runtime 的 exec 方法的确是可行的。
假设我们已经把以下的 C 程序编绎成 adder.exe:
#include <stdio.h>
int main() { /* 简单地循环打印标准输入上的两个整数之和 */
int a, b, lineNumber = 0;
while (scanf("%d %d", &a, &b))
printf("Line# %d \t %d + %d == %d\n", ++lineNumber, a, b, a + b);
return 0;
}
以下的 Java 程序可以在启动 adder.exe 后,跟 adder.exe 的标准输入和输出接轨,然后持续不断地向它发送数据和索取结果:
import java.io.*;
class C {
public static void main(String[] args) throws Exception {
final Process proc = Runtime.getRuntime().exec("adder.exe");
// 用另一个线程把参数送到 proc 的标准输入上去。
new Thread() {
public void run() {
OutputStream stdin = proc.getOutputStream();
for (int i = 0; ; i++) {
try {
Thread.sleep(1); // 要休息片刻才看得到 I/O 的缓存效果。
stdin.write((i + " " + i + "\n").getBytes());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}.start();
// 主线程负责读取并打印 proc 的标准输出。
BufferedReader stdout = new BufferedReader(new InputStreamReader(proc.getInputStream()));
for (String line; null != (line = stdout.readLine()); )
System.out.println(line);
}
}
循环里的 Thread.sleep(1) 纯粹是为了凸显 I/O 的缓存效果。
我测试时看到大约 900 行的缓存量(用 32-bit XP 和 Java 1.6)。
参考资料: http://www.rgagnon.com/javadetails/java-0014.html
展开全部
简单的说一下吧,你这个是java程序调用其他程序的问题,可以
1)Runtime.getRuntime().exec("adder.exe");
这样做,也可以指定路径和exe文件的名称,
2)也可以指定一个注册表注册了的服务
当然linux下面也是Runtime.getRuntime().exec("adder.exe");
不过就没有注册这么一说了
1)Runtime.getRuntime().exec("adder.exe");
这样做,也可以指定路径和exe文件的名称,
2)也可以指定一个注册表注册了的服务
当然linux下面也是Runtime.getRuntime().exec("adder.exe");
不过就没有注册这么一说了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该把你的C语言的手动操作描述出来。
主要是启动后它一次性地scanf还是循环scanf?
》》没这方面的经验,期待正解。。
主要是启动后它一次性地scanf还是循环scanf?
》》没这方面的经验,期待正解。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询