我想编写一个执行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提供输入并同时读取其输出的程序?
答案 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批处理脚本和路径。 (虽然没有尝试过输入)