Communicating with C++ process from Java

半腔热情 提交于 2020-01-07 04:30:29

问题


First, I saw a few Q's about this issue in the site, but didn't see any answer that solve my problem.

I have a program written in Java and it calls a cmd program written in C++. (this is an assumption since I don't have the actual source) I know the expected I/O of the C++ program, in the cmd it is two lines of output and then it waits for string input. I know that the first output line of the program is through error stream, and I receive it properly (this is expected), but I don't get the second line in error or input stream. I tried to write to the program right after the first line ( the error line) and didn't got stuck, but there was no response. I tried using 3 different threads, for each stream, but again, nothing was received in input/error stream after the first line, and the program didn't respond to writing through output stream.

My initializers are:

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

Is it possible at all or maybe it depends on the C++ program?

Thanks, Binyamin


回答1:


If you want to call native applications like C and C++ from Java, you need to use JNI.




回答2:


I would suggest to put the input in the program when it has started, it will propably use that as input when it wants it.




回答3:


Here is how I execute any command line in Java. This command line may execute any program:

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

}


来源:https://stackoverflow.com/questions/4534698/communicating-with-c-process-from-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!