通过Java进程将输入发送到正在运行的JAR

时间:2015-04-23 13:08:33

标签: java jar ipc

我想编写一个执行JAR并获取其输出的程序。 当JAR程序只有一个print语句时,它工作正常,但是当它在执行期间要求输入时,程序会冻结。

JAR文件程序的代码:

public class jartorun {
    public static void main(String arg[]) throws IOException {
        String t = "javaw -jar D:\\jarcheck\\temp.jar";
        Process p = Runtime.getRuntime().exec(t);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = "";
        while ((line = input.readLine()) != null) {
            System.out.print(line + "\n");
        }
        input.close();
    }
}

运行JAR文件的原始程序的代码:

process.getOutputStream()

我可以使用{{1}}向JAR提供输​​入,但是我如何使用它以便创建一个可以为JAR提供输​​入并同时读取其输出的程序?

2 个答案:

答案 0 :(得分:0)

您可以使用p.getOutputStream()为已启动的流程提供输入。

答案 1 :(得分:0)

如果您想在VM外部运行内容,请使用ProcessBuilder。对我来说很好,你可以继承IO流。

ProcessBuilder builder = new ProcessBuilder("./script.sh",
                            "parameter1");
            builder.directory(new File("/home/user/scripts/"));
            builder.inheritIO();

            try {
                    Process p = builder.start();
                    p.waitFor();
                    // Wait for to finish
            } catch (InterruptedException e) {
                    e.printStackTrace();
            } catch (IOException ioe) {
                    ioe.printStackTrace();
            }

这也适用于Windows批处理脚本和路径。 (虽然没有尝试过输入)