2014-07-16 2 views
1

새로운 파일을 생성하고 $ EDITOR에 저장된 시스템 기본 편집기로 열어 본 다음 편집기를 닫은 후 종료 할 작은 Java 명령 줄 응용 프로그램을 작성하려고합니다.Java 프로그램에서 Linux의 다른 명령 줄 응용 프로그램을 열려면 어떻게합니까?

은 지금까지 운없이, 나는 다음과 같은 노력했습니다 :

Desktop dt = Desktop.getDesktop(); 
dt.edit(file); 

이 방법은 내가 아닌 한, 터미널에서 내 프로그램을 실행하고있어 같은 종류의 감각을 만드는 UnsupportedOperationException, 결과 데스크탑에서 자바 응용 프로그램.

는 지금, 나는이있다 :이

Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec(commandString); // "vim newfile" 
proc.waitFor(); 

작업입니다,하지만 난 그것을 할 필요가 없습니다 방법에 대해 설명합니다. 전경이 실행되도록하는 방법에

1000 pts/1 S+  0:00 vim 2014-07-16.23-02 

모든 아이디어 : 나는

ps a | grep vim 

를 실행할 때 나는 정말로 내가 제공 한 파일 이름으로, 백그라운드에서 실행되는 것을 볼 수 있습니까?

답변

1

많은 대화 형 프로그램처럼 vim도 stdinioctl을 호출 할 수있는 실제 터미널이 될 것으로 기대합니다. 그러나 Runtime.exec()stdin을 통해 실행하면 상위 프로세스 (Javadoc on Process for more information 참조)로 리디렉션됩니다.

Java 7에서는 ProcessBuilder.inheritIO()을 사용하여 파일 핸들을 전달할 수 있습니다. (부인 : YMMV 시도하지 않았습니다.)

+0

Java 6 솔루션을 찾고 싶었지만 Java 7이 필요합니다. – grimetime

+1

@grimetime : 자바 6을 사용하고 있다면, 항상 JNI를 사용하여 네이티브 코드에서'fork()'를 할 수 있습니다. 물론, 플랫폼 별 JNI 의존성을 끌어 당기는 고통에 대처해야합니다. –

관련 문제