Search results for 'process'

Runtime 클래스를 이용한 외부 프로그램 호출

java.lang 패키지의 Runtime 클래스는 자바에서 외부 프로세스를 생성하는 방법을 제공한다.
예를 들어 자바를 이용하여 MS 윈도우에서 MS 엑셀을 실행하는것등에 이 Runtime클래스를 이용할 수 있다.

예를 들어 C:\Program Files\Microsoft Office\Office\excel.exe 위치에 있는 excel.exe를 실행
하는 코드는 아래와 같다.
[code]
try {
   Runtime run = Runtime.getRuntime ();
   run.exec ( "C:\\Program Files\\Microsoft Office\\Office\\excel.exe" );
} catch ( IOException ie )

   System.err.println ( ie );
}
[/code]
어떤가, 무척 간단하지 않는가?
그럼, 한걸음 더 나아가 보자.
윈도우는 파일확장자별로 대표 프로그램을 등록하여 파일을 더블클릭하는것만으로 해당 프로그램을 실행 할 수가
있는데 이렇게 특정 파일을 선택하여 그와 연결된 프로그램을 실행하는 코드도 자바로 가능 할까?
물론, 가능하다. 여기에는 윈도우즈 명령어를 조금 알아야 하는 부분이 있지만 그 부분만 알고 있다면 나머지는
위와 동일하게 Runtime 객체로 그 명령어를 실행 하기만 하면된다.
아래 코드를 보자.
[code]
package javacodesnipet;

import java.io.File;
import java.io.IOException;

/**
 * Runtime클래스를 이용하여 해당 파일과 연결된 프로그램을 실행한다.
 * @author 신윤섭
 */
public class RuntimeExample {
 public static void main(String[] args){
  try {
     File file = new File("d:\\sample.pdf");
   
     //MS Windows Only
     Process p= Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " +
     file.getAbsolutePath());
     // or
     //Process p= Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +
     // file.getAbsolutePath());
   
     //Apple Mac Only
     //Process p= Runtime.getRuntime().exec("open " + file.getAbsolutePath());
   
     p.waitFor();
     System.out.println("Process Done");
   
  } catch (InterruptedException ex) {
     ex.printStackTrace();
  } catch (IOException ex) {
     ex.printStackTrace();
  }
 }
}
[/code]
위 코드는 윈도우 탐색기에서 d:\sample.pdf를 더블클릭하여 아크로뱃리더를 실행하고 해당 pdf문서를
여는것과 동일한 효과를 얻을 수 있다.  윈도우의 rundll32 명령으로 해당 파일과 연결된 프로그램을 구동
할 수 있는데 이를 Runtime객체를 이용하여 수행하는 코드이다.

rundll32 more..

2008/08/02 00:54 2008/08/02 00:54
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. Blog Icon
    한상규

    정말 정말 감사합니다.