【发布时间】:2015-02-05 12:05:07
【问题描述】:
我想向子进程和它们发送一些字符串,这会将我以大写形式发送回来。这个想法是我放一个空字符串,两个过程都会停止。 第一次效果很好,但下一次过程卡在第二次,我需要强制关闭。
父亲代码 ->
public class padre {
public static void main(String[] args){
System.out.println("Soy el padre");
try {
Process p = Runtime.getRuntime().exec("java -jar C:\\Users\\Cristian\\Desktop\\hijo.jar");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader escritorPadre = new BufferedReader(isr);
//Leer del hijo
BufferedReader brHijo = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader brHijoError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
//EScribir en el hijo
OutputStream os = p.getOutputStream();
String lineaConsola;
while((lineaConsola = escritorPadre.readLine()).isEmpty() == false){
lineaConsola +="\n";
os.write(lineaConsola.getBytes());
os.flush();
String linea;
while((linea = brHijo.readLine()) != null){
System.out.println(linea);
System.out.println("Atascado en el while del padre");
}
while((linea = brHijoError.readLine()) != null){
System.out.println(linea);
System.out.println("Atascado en el while del padre error");
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
子代码->
public class hijo {
public static void main(String[] args){
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(in);
String linea;
try {
while(!(linea = br.readLine()).isEmpty()){
System.out.println("Hijo -> " + linea.toUpperCase()+"\n");
System.out.println("Atascado en el while del hijo");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
【问题讨论】:
-
为什么会产生启动多个 JVM 而不是同时调用另一个方法的开销?
-
而且你不需要空行。仅关闭输出流将在子进程的输入流处产生流结束。你不需要其他任何东西。
标签: java process inputstream outputstream