2014-06-18 1 views
0

이 질문은 두 개의 자바 프로그램 사이의 입출력 방향 재 지정에 관한 내용입니다. 내 문제의 간단한 예제 소스 코드는 아래와 같습니다. 자바 프로그램 간 입출력 공유

은 PROG1입니다 : 나는 인터넷 익스플로러가 실행이 성공했는지 확인하기 위해 실행하는 별도의 파일에

import java.io.*; 

public class prog1{ 
    public static void main(String[] args) throws IOException{ 
     Runtime rt = Runtime.getRuntime(); 
     Process prog2 = rt.exec("java prog2"); 
     System.out.println("prog2 has executed."); 
    } 
} 

, 내가 작성한 PROG2는 :

import java.io.*; 

public class prog2{ 
    public static void main(String[] args) throws IOException{ 
     BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.print("Enter a string: "); 
     System.out.println("You entered " + in.readLine() + ". Starting Explorer..."); 
     Runtime.getRuntime().exec("C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe"); 
    } 
} 

이 내가 볼 것입니다 내가 PROG2를 실행하는 경우 :

> java prog2 
Enter a string: hello ** Here the program waited for my input ** 
You entered hello. Starting Explorer... ** Here Internet Explorer opens a new window ** 

이것은 내가 PROG1을 실행하면 내가 볼 것입니다 :

> java prog1 
prog2 has executed. ** Internet Explorer opens a new window ** 

prog2는 입력을 요구하지 않으며 아무 것도 출력하지 않았습니다.

> java prog1 
Enter a string: hello ** Here I wish for the program to await my input ** 
You entered hello. Starting Explorer... ** Here I wish for an Explorer window to open ** 
prog2 has executed. 

나는이 문제가 I/O 리디렉션의 좋은 지식이 필요하다고 생각하지만, 나는 불행하게도 그 지역에서 매우 미경입니다 : 내 목표는 발생하는 다음입니다. 모두에게 미리 감사드립니다.

데빈

답변

1

이 바꾸기 :이

Process prog2 = rt.exec("java prog2"); 

을 :

Process prog2 = new ProcessBuilder("java", "prog2").inheritIO().start(); 

ProcessBuilder는 Runtime.exec의 방법에 대한 바람직한 치환이다.

+0

귀하의 답변은 매우 도움이되었습니다. 고맙습니다. 이제 prog1을 실행하면 "prog2가 실행되었습니다."라는 메시지가 나타납니다. 명령 줄에 다음 줄에 "문자열 입력 :"이 표시됩니다. 이것은 내 목표에 더 가깝지만 거기에 있지는 않습니다. 첫 번째 프로그램이 두 번째 프로그램의 종료를 기다리는 권장 방법이 있습니까? – devneal17

+0

내가 찾고있는 해결책을 찾았습니다. 프로세스 후 prog2 = new ProcessBuilder ("java", "prog2"). inheritIO(). start(); 나는 prog2.waitFor()를 추가했다. 잠재적 인 InterruptedException을 포착 할 수 있습니다. 그것은 내가 원하는 방식으로 정확하게 작동합니다. 다시 감사합니다. – devneal17