2015-01-24 3 views
-1
Process p = Runtime.getRuntime().exec("javac Test.java"); 
    Process q = Runtime.getRuntime().exec("java Test"); 
    p.waitFor(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(q.getInputStream())); 
    String line; 
    while((line = reader.readLine()) != null) { 
     System.out.println(line); 
    } 

이 작동하지 않습니다 ...... 또한 오류 및 출력을 반환하지 않습니다. 더 나은 프로세스 또는 프로세스 작성자가 무엇인지 묻고 싶습니다여러 명령으로 processbuider를 통해 java 파일을 컴파일하고 실행하는 방법은 무엇입니까?

답변

1

코드는 javacjava 프로세스를 함께 시작합니다. 물론 javac 프로세스가 여전히 작동하는 경우 결과에 java을 실행하지 마십시오.

그래서 당신은 넣어해야 당신이 과정 q를 작성하고 공정 p가 성공했을 경우에만 처리 ​​ q을 만들 p.waitFor() 전에. 오류 을 읽어 오류를 확인하실 수 있습니다, 제로 아니었다면

int exitVal = p.exitValue(); 

:

당신이 waitFor() 후, 프로세스의 반환 코드를 확인해야합니다, p 성공 여부를 알거나하지 않으려면 stream
. 현재 입력 스트림 (프로세스의 출력 스트림)을 가져 오려고합니다. 그러나 오류 스트림에 오류가 인쇄됩니다 (자신의 프로그램에서 System.err.println()을 사용하는 것처럼). 이를 얻으려면 p.getInputStream()이 아닌 p.getErrorStream()으로 전화를 한 다음이를 읽고 인쇄해야합니다.

exitVal이 0 인 경우에만 컴파일이 성공하고 실행을 기다리는 파일 .class을 가지고 있기 때문에 다른 프로세스를 만들 수 있습니다.

0

또한 RealSteptics에 대한 대답은 JDK와 함께 제공되는 tools.jar를 참조하십시오. 여기에는 직접 호출 할 수있는 javac 버전이 포함되어있어 디버깅이 더 쉽습니다.

다른 런타임 컴파일러가 있습니다. Eclipse와 함께 제공되는 예제.

관련 문제