用java与C++进程通信
首先,我在网站上看到了一些关于这个问题的问题,但没有看到任何解决我问题的答案 我有一个用java编写的程序,它调用C++编写的CMD程序。这是一个假设,因为我没有实际的源代码,我知道C++程序的预期I/O,在CMD中它是两行输出,然后等待字符串输入。 我知道程序的第一个输出行是通过错误流的,我正确地收到了它,这是预期的,但我没有在错误或输入流中得到第二行。 我试图在错误行的第一行之后立即写入程序,但没有被卡住,但没有响应。 我尝试为每个流使用3个不同的线程,但同样,在第一行之后的输入/错误流中没有接收到任何内容,并且程序没有响应通过输出流进行写入 我的起首人是:用java与C++进程通信,java,process,external-process,Java,Process,External Process,首先,我在网站上看到了一些关于这个问题的问题,但没有看到任何解决我问题的答案 我有一个用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中运行它时,它工作正常,并在第二行结束时开始了一个新行。嗯。。。不用于调用本机应用程序,只用于调用本机库。