2017-11-01 7 views
1

C, C++, Python 등의 코드를 실행하는 JavaFx에서 IDE 관련 프로그램을 만들고 있습니다. 그리고 사용자 코드에 컴파일 타임/런타임 오류가있는 경우 팝업 창에 스택 오버플로 관련 오류 응답이 표시됩니다. 그러나 오류가 있는지 여부는 어떻게 알 수 있습니까?Java에서 프로세스의 결과가 오류인지 여부를 확인하는 방법은 무엇입니까?

내 코드는 여기에있다 -

public BufferedReader buildCode(File file) 
    { 
     String dirname = file.getParent(); 
     String filePath = file.getPath(); 
     String fileName = file.getName(); 
     String objectFileName = FilenameUtils.removeExtension(fileName); 
     String command = "gcc " + filePath + " -o " + dirname + "/" + objectFileName; 
     BufferedReader stdInput;// = new BufferedReader(null); 
     try 
     { 
      Process process = Runtime.getRuntime().exec(command); 
      stdInput = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      BufferedReader stdErr = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
      String compileResult; 
      while ((compileResult = stdInput.readLine()) != null) 
       System.out.println(compileResult); 

      while ((compileResult = stdErr.readLine()) != null) 
       System.out.println(compileResult); 
      return stdInput; 
     } 
     catch (IOException io) 
     { 
      //noinspection ThrowablePrintedToSystemOut 
      System.out.println(io); 
      return null; 
     } 
    } 

내가이 null인지 아닌지, 내가 stdErr을 확인 같은 것을해야 할 것 같아요. 그러나 나는 아무런 에러가 없으면 EOFstdErr에 할당했다는 것을 확신하지 못합니다.

답변

1

프로세스의 출력을 구문 분석 할 필요가 없습니다. GCC will return non-zero exit code 뭔가가 잘못된 경우 : 컴파일러의 단계가 아닌 성공 반환 코드를 반환하는 경우

은 일반적으로 GCC 프로그램이 하나의 코드로 종료합니다. -pass-exit-codes를 지정하면 gcc 프로그램은 오류 표시를 리턴하는 모든 단계에서 생성 된 숫자로 가장 높은 오류와 함께 리턴합니다. 내부 컴파일러 오류가 발생하면 C, C++ 및 Fortran 프론트 엔드가 4를 리턴합니다.

final Process process = Runtime.getRuntime().exec(command); 

process.waitFor(); 

final result = process.exitValue(); 

if(0 != result) { 
    ... 
} 
:

그래서, 당신은 바로 종료 코드를 확인하실 수 있습니다