Runtime 클래스를 이용한 외부 프로그램 호출
java.lang 패키지의 Runtime 클래스는 자바에서 외부 프로세스를 생성하는 방법을 제공한다.
예를 들어 자바를 이용하여 MS 윈도우에서 MS 엑셀을 실행하는것등에 이 Runtime클래스를 이용할 수 있다.
예를 들어 C:\Program Files\Microsoft Office\Office\excel.exe 위치에 있는 excel.exe를 실행
하는 코드는 아래와 같다.
try {
Runtime run = Runtime.getRuntime ();
run.exec ( "C:\\Program Files\\Microsoft Office\\Office\\excel.exe" );
} catch ( IOException ie )
{
System.err.println ( ie );
}
어떤가, 무척 간단하지 않는가?
그럼, 한걸음 더 나아가 보자.
윈도우는 파일확장자별로 대표 프로그램을 등록하여 파일을 더블클릭하는것만으로 해당 프로그램을 실행 할 수가
있는데 이렇게 특정 파일을 선택하여 그와 연결된 프로그램을 실행하는 코드도 자바로 가능 할까?
물론, 가능하다. 여기에는 윈도우즈 명령어를 조금 알아야 하는 부분이 있지만 그 부분만 알고 있다면 나머지는
위와 동일하게 Runtime 객체로 그 명령어를 실행 하기만 하면된다.
아래 코드를 보자.
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();
}
}
}
위 코드는 윈도우 탐색기에서 d:\sample.pdf를 더블클릭하여 아크로뱃리더를 실행하고 해당 pdf문서를
여는것과 동일한 효과를 얻을 수 있다. 윈도우의 rundll32 명령으로 해당 파일과 연결된 프로그램을 구동
할 수 있는데 이를 Runtime객체를 이용하여 수행하는 코드이다.