3

別の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また、同じ目的で使ってみましたが、うまくいきませんでした。

4

2 に答える 2

1

ExpectJ(http://expectj.sourceforge.net/)を使用して、標準の入出力を使用して別のプログラムと通信できます。

最初のコードブロックでBufferedReader/を使用してtrixする代わりに、これを使用します。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");
于 2012-12-04T12:47:16.230 に答える
0

問題が何であるかを盲目的に推測するだけで、問題はフラッシュしている可能性があります。

System.out.flush();CalculateSumの各印刷の後に追加してみてください。

最初のプログラムで、などのoutput.write呼び出しに改行を追加し、その後output.write("10\n");も追加しますoutput.flush();

于 2012-12-04T12:40:55.340 に答える