2016-12-13 2 views
1

저는 ProcessBuilder을 처음 사용합니다. 오늘 나는 "java -version"을 실행하는 간단한 애플리케이션을 작성하고 있지만 항상 IOException을 얻었다. IOException이 발생했습니다. CreateProcess 오류 = 2, 지정한 파일을 찾을 수 없습니다.

ProcessBuilder pb = new ProcessBuilder("java -version"); 
     try { 
      Map<String, String> map = pb.environment(); 
      Process p = pb.start(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

예외

, 나는 JAVA_HOME이 환경 변수에 설정되어 있는지 확인 할 수

java.io.IOException: Cannot run program "java -version": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 

아래로 던져 내 일식은 너무 JDK를 가리키고 있습니다.

JAVA_HOME=C:\JDK1.8.0_66-X64. 

누구든지 내 코드/설정에 어떤 문제가 있는지 알 수 있습니까?

+1

'ProcessBuilder'를 구성 할 때'java ''와''-version "'을 별도의 명령 인수로 전달해야합니다. – JonK

+1

ProcessBuilder는 array의 첫 번째 요소를 취하여이를 프로그램 (명령) 이름으로 해석합니다 나머지는 프로그램에 대한 논쟁으로 남겨 둡니다. ProcessBuilder를 사용해보십시오 pb = new ProcessBuilder (new String [] { "java", "-version"}); –

+0

@ShubhamChaurasia varargs 생성자가 있기 때문에 수동으로 배열 – JonK

답변

1

ProcessBuilder 클래스의 생성자는 String... 유형의 인수를 사용합니다. 또한이 첫 번째 요소는 운영 체제 프로그램의 이름이어야합니다. 시스템에 java -version.exe (Windows 사용자 인 경우)이라는 파일을 찾을 수 없으므로이 예외가 발생합니다. 원하는 파일 이름은 java.exe이므로 ProcessBuilder("java", "-version")을 사용하십시오. 설명서 here을 참조하십시오. 문서에 좋은 예가 있습니다.

+0

Thx. 명령을 두 부분으로 나누면 프로그램이 예외없이 실행됩니다. 그러나 pb.start() 바로 다음에 p.getInputStream()을 확인하여 결과를 찾을 수 없습니다. 나는 여기에 접근하고있다 [link] http://stackoverflow.com/questions/3936023/printing-runtime-exec-outputstream-to-console –

+0

나는 그것을 알아 냈다. pb에 inheritIO()를 추가해야 함 –