0

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

我有一个用 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++ 程序?

谢谢,宾亚明

4

3 回答 3

0

如果要从 Java 中调用 C 和 C++ 等原生应用程序,则需要使用 JNI。

于 2010-12-26T17:47:09.597 回答
0

我建议在程序启动时将输入放入程序中,它会在需要时将其用作输入。

于 2010-12-26T17:56:24.573 回答
0

这是我在 Java 中执行任何命令行的方法。此命令行可以执行任何程序:

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();

}
于 2010-12-26T18:35:04.787 回答