//第一種 Runtime rt = Runtime.getRuntime(); Process process = rt.exec("java -jar app2.jar"); //第二種 ProcessBuilder pb = new ProcessBuilder("java", "-jar","app2.jar"); Process p = pb.start();
try{ ProcessBuilder pb=new ProcessBuilder("java -jar app2.jar".split(" ")); pb.directory(new File("e:/temp/clean_day/jar/")); //標準錯誤和輸入流合併爲輸入流 pb.redirectErrorStream(true); //建立子進程 Process p=pb.start(); //使用Process的輸入流接收子進程發送的消息 BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())); //使用Process的輸出流向子進程發送消息,並把PrintWriter設置爲自動flush. PrintWriter wr=new PrintWriter(new OutputStreamWriter(p.getOutputStream()),true); String lineStr; while((lineStr=br.readLine())!=null){ System.out.println("收到子進程的消息:"+lineStr); //向子進程發送消息 wr.println(System.currentTimeMillis()); } wr.close(); br.close(); }catch(Exception ex){ System.out.println(ex.getMessage()); }
try{ System.out.println("子進程啓動成功"); System.out.println(System.currentTimeMillis()); //利用標準輸入來接收父進程發送的消息 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String lineStr; while ((lineStr = br.readLine()) != null) { System.out.println("child\t"+lineStr); } br.close(); }catch(Exception ex){ System.out.println(ex.getMessage()); }
public class App { public static void main(String[] args) { PpWriter wr=new PpWriter(); PpReader rd=new PpReader(wr); Thread wrth=new Thread(wr); wrth.start(); Thread rdth=new Thread(rd); rdth.start(); } } /** * 管道寫 * App.java:Temp * 2015年3月26日 * @author kevin.zhai(韓旭) */ class PpWriter implements Runnable{ private PipedWriter pipedWriter; public PpWriter(){ this.pipedWriter=new PipedWriter(); } @Override public void run() { try { while(true){ //由於讀使用了readline,所以這裏要換行 String sendStr=System.currentTimeMillis()+"\r\n"; this.pipedWriter.write(sendStr); System.out.println("父發送:"+sendStr); Thread.sleep(1000); } } catch (IOException | InterruptedException e) { e.printStackTrace(); } } public PipedWriter getPipedWriter() { return pipedWriter; } } /** * 管道讀 * App.java:Temp * 2015年3月26日 * @author kevin.zhai(韓旭) */ class PpReader implements Runnable{ private PipedReader pipedReader; public PpReader(PpWriter ppWriter){ try { //讀須要先和寫創建鏈接,不然報異常:Pipe not connected this.pipedReader=new PipedReader(ppWriter.getPipedWriter()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try(BufferedReader br=new BufferedReader(this.pipedReader)){ while(true){ System.out.println("子接收:"+br.readLine()); } } catch (IOException e) { e.printStackTrace(); } } }