2012-12-04 25 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();