2012-12-04 24 views
3

控制Java程序我想用运行从另一个Java程序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来达到同样的目的,但这也没有奏效。

+3

问题是什么?请在...问题中添加实际问题。 – hyde

+3

使用另一个Java程序运行Java程序!! ??什么给老兄?你想达到什么目的? – sakthisundar

+0

你为什么需要这个?套接字编程如何? –

回答

1

您可以使用ExpectJ(http://expectj.sourceforge.net/)与另一个使用标准输入/输出的程序对话。

使用此,而不是在你的第一个代码块与BufferedReader/BufferedWriter trixing:

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"); 
+0

在上面给出的例子中,我有源代码,所以我可以使用http://expectj.sourceforge.net/ 进行编辑但实际上我没有源代码。 我只有访问其他程序的代码。 –

+0

等一下,你有什么代码?客户端(首先在您的问题)或CalculateSum? – Markus

+0

我没有实际的CalculateSum代码。 –

0

只是盲目地猜测问题是什么,问题可能是冲洗。

尝试在每次打印CalculateSum后添加System.out.flush();

在第一个程序中,在您的output.write调用中添加换行符,例如output.write("10\n");以及之后的output.flush();