我想使用ProcessBuilder
我使用了代码
Process pr = rt.exec("cmd /c cd C:\\Users\\naman\\Desktop & java CalculateSum");
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
BufferedReader error = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
BufferedWriter output= new BufferedWriter(new OutputStreamWriter(pr.getOutputStream()));
String line = null;
while ((line = input.readLine()) != null) {
System.out.println(line);
}
output.write("10");
output.write("30");
while ((line = input.readLine()) != null) {
System.out.println(line);
}
int exitVal = pr.waitFor();
System.out.println("Exited with error code " + exitVal);
CalculateSum有以下代码:
System.out.print("Enter 1 st value : ");
a=Integer.parseInt(br.readLine());
System.out.print("\nEnter second number : ");
b=Integer.parseInt(br.readLine());
System.out.println("\nresult is : "+(a+b));
我的基本动机是从另一个Java程序运行Java程序。
注意:我不想使用命令行参数来获取输入。此外,我尝试将ProcessBuilder
用于同一目的,但这也无效。
答案 0 :(得分:1)
您可以使用ExpectJ(http://expectj.sourceforge.net/)使用标准输入/输出与另一个程序对话。
在第一个代码块中使用{而不是trixing与BufferedReader
/ BufferedWriter
:
ExpectJ expectinator = new ExpectJ(5);
Spawn shell = expectinator.spawn("cmd /c cd C:\\Users\\naman\\Desktop & java CalculateSum");
// Talk to it
shell.expect("Enter 1 st value");
shell.send("10\n");
shell.expect("Enter second value");
shell.send("30\n");
答案 1 :(得分:0)
只是盲目地猜测问题是什么,问题可能正在浮现。
尝试在CalculateSum中的每次打印后添加System.out.flush();
。
在第一个程序中,为output.write调用添加换行符,例如output.write("10\n");
,然后再添加output.flush();
。