【高分求教】如何在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中的参数
展开
 我来答
leeps_my
推荐于2016-06-09 · TA获得超过807个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:0
展开全部
 
 
 
用 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

九书
2008-10-27 · TA获得超过418个赞
知道小有建树答主
回答量:374
采纳率:100%
帮助的人:98.8万
展开全部
简单的说一下吧,你这个是java程序调用其他程序的问题,可以
1)Runtime.getRuntime().exec("adder.exe");
这样做,也可以指定路径和exe文件的名称,
2)也可以指定一个注册表注册了的服务

当然linux下面也是Runtime.getRuntime().exec("adder.exe");
不过就没有注册这么一说了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4944a479b44
2008-10-27 · 超过24用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:0
展开全部
你应该把你的C语言的手动操作描述出来。
主要是启动后它一次性地scanf还是循环scanf?

》》没这方面的经验,期待正解。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式