我正在尝试写入子进程的标准输入(两者都是 Java 应用程序)。PrintStream
读取进程的输出工作正常,但使用或输入不起作用PrintWriter
。这是我编写的用于测试奇怪行为的示例程序,我在没有参数的情况下运行该程序。然后运行与子进程相同的程序。子进程只是读取输入并将其回显到输出中。主进程获取标准输入并将其写入子进程输入,并将子进程输出输出到标准输出。
麻烦的是,这行不通。子流程的与父流程中的语句nextLine()
不匹配,因此子流程永远不会输出任何内容。println()
为什么会发生这种情况,我该如何解决(最好在父进程上,因为我无法更改主项目的子进程)。
import java.lang.*;
import java.io.*;
import java.util.Scanner;
public class ProcTest{
public static Scanner stdin;
public static String line;
public static Process sub;
public static BufferedReader childout;
public static PrintWriter childin;
public static void main(String[] args){
stdin = new Scanner(System.in);
if(args.length > 0 && args[0].equals("y")){
while(true){
line = stdin.nextLine();
System.out.println(line);
}
}else{
try{
sub = Runtime.getRuntime().exec("java ProcTest y");
childout = new BufferedReader(new InputStreamReader(sub.getInputStream()));
childin = new PrintWriter(sub.getOutputStream());
while(true){
childin.println(stdin.nextLine());
childin.flush();
while(childout.ready()) System.out.println( childout.readLine() );
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}