有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

通过ProcessBuilder执行的java“C”二进制文件正在阻止执行流

我试图通过Java执行一个二进制文件(用“C”编写),而二进制文件是成功执行的。在按下“回车”键之前,它不会将执行控制返回到此代码(已阻止)。因为这个问题的prcs。waitfor()==0'从未执行,用户不知道二进制执行是否成功。我试图在OutputStream上创建BufferedWriter以发送“Enter”击键(//r),但它不起作用。这里需要做些什么,以便执行控制回到该代码和“PRC”。waitfor()==0'已执行。我需要继续执行另一个命令,这取决于第一个命令的成功执行。我被这件事困住了:(

    // Start ProcessBuilder, 'str' contains a command

    ProcessBuilder pbuilder = new ProcessBuilder(str);
    pbuilder.directory(new File("/root/workspace/Project1"));
    pbuilder.redirectErrorStream(true);
    Process prcs = pbuilder.start();
    AForm.execStatustext.append("\n=> Process is:" + prcs);

    // Read output
    StringBuilder out = new StringBuilder();
    BufferedReader bfrd = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String current_line = null, previous_line = null;
    while ((current_line = bfrd.readLine()) != null) {
        if (!line.equals(previous_line)) {
            previous_line = current_line;
            out.append(current_line).append('\n');
            //System.out.println(line);
        }
    }
    //process.getInputStream().close();
    // Send 'Enter' keystroke through BufferedWriter to get control back
    BufferedWriter bfrout = new BufferedWriter(new OutputStreamWriter(prcs.getOutputStream()));
    bfrout.write("\\r");
    bfrout.newLine();
    bfrout.flush();
    bfrout.write("\\r");
    bfrout.newLine();
    bfrout.flush();
    //process.getOutputStream().close();*/

    if (prcs.waitFor() == 0)
        System.out.println("Commands executed successfully");
    System.exit(0);

共 (1) 个答案

  1. # 1 楼答案

    \\r不是插入符号返回,它是\后跟r。插入符号返回仅为\r

    另外,bfrout.newLine();应该包括平台相关的行分隔符。也许你根本不需要插入符号返回