본문 바로가기

닷컴's_열공/JAVA

process class waitFor() hang 처리...


 자바에서 외부 프로그램을 로딩 및 처리하는 프로세스 클래스인 Process 클래스의 멤버 메쏘드로 waitFor()가 있는데, 자꾸 hang이 걸립니다.. ^^;; 몇번을 간단하게 테스트 했는데도 계속 hang이 걸리네요...... ^^;;
코드를 아래와 같이 고치면 해결이 됩니다.. ^^

  1. try    
  2. {    
  3.     Runtime runtime= Runtime.getRuntime();    
  4.     Process process= runtime.exec("javac *.java"); // 여기에서 외부 프로그램 실행     
  5.     java.io.InputStream is= process.getInputStream();    
  6.     java.io.BufferedReader br=new java.io.BufferedReader(new java.io.InputStreamReader(is));    
  7.     String tmp;    
  8.     while ( !( (tmp=br.readLine()) == null ))    
  9.     {    
  10.         System.out.println(tmp);   
  11.     }    
  12.     br.close();    
  13.     is.close();    
  14. }    
  15. catch(Exception e)    
  16. {    
  17.     e.printStackTrace();    
  18. }   


참고로..
Runtime Class
  1. public static Runtime getRuntime()// 현재 실행되고 있는 자바 애플리케이션과 관련된 런타임 객체를 리턴해 줍니다.   
  2. public void exit(int status)// 현재 자바 가상머신을 종료합니다. status 매개변수는 종료시의 상태값을 나타내며, 일반적으로 0 이외의 값은 비정상적으로 종료되었음을 의미합니다.   
  3. public Process exec(String command) throws IOException// 주어진 명령어를 독립된 프로세스로 실행시켜 줍니다. exec(command, null)와 같이 실행시킨 것과 같습니다.   
  4. public Process exec(String command, String envp[]) throws IOException //주어진 명령어를 주어진 환경을 갖는 독립된 프로세스로 실행시켜 줍니다. 이 메소드는 명령어 문자열을 토큰으로 나누어 이 토큰들을 포함하고 있는 cmdarray라는 새로운 배열을 생성합니다. 그리고 나서 exec(cmdarray, envp)을 호출합니다.   
  5. public Process exec(String cmdarray[]) throws IOException // 주어진 문자열 배열에 있는 명령어와 매개변수를 이용하여 독립된 프로세스로 실행시켜 줍니다. exec(cmdarray, null)을 호출합니다.   
  6. public Process exec(String cmdarray[], String envp[]) throws IOException // 주어진 문자열 배열에 있는 명령어와 매개변수를 이용하여 주어진 환경을 갖는 독립된 프로세스로 실행시켜 줍니다. 문자열 배열 cmdarray에는 명령어와 명령행 인자들을 나타내고 있습니다.   
  7. public native long freeMemory() // 시스템에 남아있는 메모리의 양을 얻습니다. 이 값은 항상 totalMemory() 메소드에 의해 얻어지는 값보다 작습니다.   
  8. public native long totalMemory() // 자바 가상머신의 최대 메모리 크기를 얻습니다.   

Process Class
  1. public abstract OutputStream getOutputStream() // 자식 프로세스의 출력 스트림을 얻습니다.   
  2. public abstract InputStream getInputStream() // 자식 프로세스의 입력 스트림을 얻습니다.   
  3. public abstract InputStream getErrorStream() // 자식 프로세스의 에러 스트림을 얻습니다.   
  4. public abstract int waitFor() throws InterruptedException // 자식 프로세스가 종료될 때까지 기다립니다.   
  5. public abstract int exitValue() // 자식 프로세스가 종료할 때의 상태값을 얻습니다.   
  6. public abstract void destroy() // 자식 프로세스를 강제로 종료시킵니다   



'닷컴's_열공 > JAVA' 카테고리의 다른 글

PDF와 자바  (0) 2011.03.07
자바 형변환 하기 java  (0) 2010.07.29
자바- 엑셀 업로드 만들기  (2) 2008.11.28
RSS Reader 컴포넌트 만들기 - 자바  (1) 2008.08.21
RSS Writer 컴포넌트 만들기 - 자바  (0) 2008.08.21