2014-11-22 55 views
1

我每次重新啓動子進程比我需要獲得一個隨機數,但我認爲它可以使用outPutStream完成,但我不知道如何。我看到其他人張貼,但我沒有發現與我的問題無關。我不想使用套接字。Java - 如何使用outputstream將值發送給子進程?

主要過程。

public class ejercicio7 { 

    public static void main(String [] args){ 
     boolean cerrado = false; 

     try { 
      while(!cerrado){ 
       String entrada = JOptionPane.showInputDialog(null, "Introduce una entrada"); 
       Process proceso = Runtime.getRuntime().exec("java -jar C:\\Users\\Cristian\\Desktop\\java\\numeros.jar \"" + entrada+"\""); 
       BufferedReader br = new BufferedReader(new InputStreamReader(proceso.getInputStream())); 
       String texto; 

       while((texto = br.readLine()) !=null){ 
        if(Boolean.parseBoolean(texto)){ 
         cerrado = true; 
        }else{ 
         System.out.println(texto); 
        } 
       }    
       br.close(); 
       proceso.destroy(); 
      } 


     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

子過程。

public static void main(String[] args) { 

     if(args.length <=0 && args[0].length() == 0){ 
      System.out.println("No se ha introducido una entrada"); 
     }else{ 

      if(!args[0].equalsIgnoreCase("fin")){ 
       System.out.println(Math.round(Math.random() * 10)); 
      }else{ 
       System.out.println("true"); 
      } 
     } 

    } 

} 
+0

爲什麼使用閱讀器,如果你的主代碼想要將數據發送給孩子。從proceso.getOutputStream() – MeBigFatGuy 2014-11-22 20:15:20

+0

打開一個作家是的,我知道這一點,但問題是說,如何讀取子進程的發送主進程。 – 2014-11-22 21:21:43

回答

1

讓你的孩子工藝處理輸入流:

public static void main(String[] args) throws Exception { 
    String line; 
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, "UTF-8")); 

    while (!"fin".equals(line = reader.readLine())) { 
     System.out.println(line); 
    } 

    System.out.println("buy"); 
} 

然後在主過程中,你可以發送郵件到子進程:

Process proceso = Runtime.getRuntime().exec("java -jar C:\\Users\\Cristian\\Desktop\\java\\numeros.jar"); 
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(proceso.getOutputStream())); 
BufferedReader in = new BufferedReader(new InputStreamReader(proceso.getInputStream())); 
String texto; 

out.write(entrada + "\n"); 
out.flush(); 

while((texto = in.readLine()) !=null){ 
    ... 
+0

我試圖在一個非常簡短的例子中實現你的代碼。我發現的第一個錯誤是out.writeLine不存在,但我認爲是write()方法。無論如何,我無法正常工作。 我無法粘貼所有的代碼。 Main: 'BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(proceso.getOutputStream())); \t \t \t \t \t \t bw1.write( 「asdasd」);' 兒童: '的BufferedReader BR1 =新的BufferedReader(新的InputStreamReader(System.in, 「UTF-8」));' – 2014-11-22 21:16:41

+0

I」 ve剛剛更新了不動的 – ursa 2014-11-22 22:06:54

+0

是的,它的工作原理!非常感謝 :) – 2014-11-23 01:23:21