用java与C++进程通信

用java与C++进程通信,java,process,external-process,Java,Process,External Process,首先,我在网站上看到了一些关于这个问题的问题,但没有看到任何解决我问题的答案 我有一个用java编写的程序,它调用C++编写的CMD程序。这是一个假设,因为我没有实际的源代码,我知道C++程序的预期I/O,在CMD中它是两行输出,然后等待字符串输入。 我知道程序的第一个输出行是通过错误流的,我正确地收到了它,这是预期的,但我没有在错误或输入流中得到第二行。 我试图在错误行的第一行之后立即写入程序,但没有被卡住,但没有响应。 我尝试为每个流使用3个不同的线程,但同样,在第一行之后的输入/错误流中没

首先,我在网站上看到了一些关于这个问题的问题,但没有看到任何解决我问题的答案

我有一个用java编写的程序,它调用C++编写的CMD程序。这是一个假设,因为我没有实际的源代码,我知道C++程序的预期I/O,在CMD中它是两行输出,然后等待字符串输入。 我知道程序的第一个输出行是通过错误流的,我正确地收到了它,这是预期的,但我没有在错误或输入流中得到第二行。 我试图在错误行的第一行之后立即写入程序,但没有被卡住,但没有响应。 我尝试为每个流使用3个不同的线程,但同样,在第一行之后的输入/错误流中没有接收到任何内容,并且程序没有响应通过输出流进行写入

我的起首人是:

Process p = Runtime.getRuntime().exec("c:\\my_prog.exe");
BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

这是完全可能的,还是取决于C++程序? 谢谢,


斌亚敏< /P> < P>如果你想调用java和C++的本地应用程序,你需要使用JNI。< /P> < P>我建议把输入放在程序中,当它启动时,它将作为输入使用它。< /P> < P>这是我在爪哇中执行任何命令行的方法。此命令行可以执行任何程序:

private String executionCommandLine(final String cmd) {

    StringBuilder returnContent = new StringBuilder();
    Process pr;
    try {
        Runtime rt = Runtime.getRuntime();
        pr = rt.exec(cmd);

        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String line = null;

        while ((line = input.readLine()) != null) {
            returnContent.append(line);
        }
        input.close();
        LOG.debug(returnContent.toString());

        // return the exit code
        pr.waitFor();
    } catch (IOException e) {
        LOG.error(e.getMessage());
        returnContent = new StringBuilder();
    } catch (InterruptedException e) {
        LOG.error(e.getMessage());
        returnContent = new StringBuilder();
    }

    return returnContent.toString();

}

如果C++程序使用流来输入和输出,它将工作。当你让程序打印它接收的字符串时,你的程序输出什么?两条线合在一起还是只有第一条?控制台程序的预期输入是在某些提示之后还是在空行中?仅第一行。我用IDA对它进行了一点调试,第一行是通过错误流输出的。第二行似乎是标准输出,尽管我不确定,因为我的IDA技能很差。第一行和第二行是程序不同检查的结果。第二行的输出是否以换行结束?@thejh:开始时没有,但我在二进制文件中添加了一个换行字符,当我在cmd中运行它时,它工作正常,并在第二行结束时开始了一个新行。嗯。。。不用于调用本机应用程序,只用于调用本机库。