Search results for 'process'

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객체를 이용하여 수행하는 코드이다.

이 글의 관련글
  • Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크
  • 윈도우즈 블루스크린 코드 일람:: Windows BlueScreen Code
  • 터미널서버(Terminal Server)의 포트를 변경하는 방법
  • IE8의 IE7 에뮬레이션 CSS Hack
  • java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용한 Java객체의 xml 변환
  • 소켓통신 서버/클라이언트 통신시 IO Blocking 상태에 빠지는 코드와 해결 방안
  • 자바 어플리케이션(jar)을 실행파일(exe)로 만들기 :: launch4j (2)
  • C# 레지스트리에 값을 쓰고, 읽고, 삭제하기
  • 문자열 오브젝트의 길이는?
  • 2008/08/02 00:54 2008/08/02 00:54
    Trackback Address:http://www.yunsobi.com/blog/trackback/411
    [로그인][오픈아이디란?]