2012-06-21 1 views
4

소프트웨어 설치를 실행하기 위해 런타임 클래스를 사용하고 있습니다. 그러나 작동하지 않습니다. 즉, Runtime 클래스를 사용하여 생성 된 작업을 실행 한 후 얼마 지나지 않아 곧 설치 작업이 종료됩니다. 문제는 메인 스레드가 끝나고 런타임 클래스를 사용하여 생성 된 프로세스를 종료해야한다는 것입니다. 나 맞아 ? 그리고 그 해결책은 무엇입니까? Java의 주 스레드가 런타임 클래스 실행 완료를 사용하여 만들 수있는 프로세스를 완료하기 전에 완료합니까

try 
     { 
      Runtime.getRuntime().exec(cmd); 
     }        
     catch(IOException e)  
     { 
      //add logging functionality 
      e.printStackTrace(); 
     } 

곧이 명령 한 후, 주요 기능은 완료 :

이 내가 TEH 메인 클래스 내에서 내 일을 발사하는 방법입니다.

런타임 명령에 문제가 없습니다. 그것은 작동합니다 .. 나는 그것을 시작 (코드를 통해 해고 오전 설치 taht) 볼 수 있습니다 그리고 갑자기 종료됩니다.

시도는 코드를 잘보고,

답변

5

java.lang.Process 클래스를 확인하십시오. 아마도 다음과 같은 것을 원할 것입니다 :

 Process process = Runtime.getRuntime().exec(cmd); 
     process.waitFor(); 

하위 프로세스가 SIGHUP을 받고 종료 중일 수 있습니다.

편집 :

이 상황에서 이런 일이, 내가 생각 :

try 
    { 
     Process process = Runtime.getRuntime().exec(cmd); 
     process.waitFor(); 
    }        
    catch(IOException e)  
    { 
     //add logging functionality 
     e.printStackTrace(); 
    } 
    catch(InterruptedException e)  
    { 
     e.printStackTrace(); 
    } 
+0

감사합니다. – Chani

0

이 그냥 추측이지만, 나는 당신이 당신의 코드 (논리)에 곧 종료 어쩌면 while 루프에 오류가 있기 때문에의 종료 프로그램 할 생각 그 런타임이 실행됩니다.

프로세스가 갑자기 교착 상태에 있습니다. 해결책은 샘플과 함께 주석에 있습니다.

+1

안녕하세요, 저는 런타임에 의해 시작되는 코드에 문제가 없음을 100 % 확신합니다. 나는 그것을 별도로 테스트했다. – Chani

+0

이 사이트를 방문하십시오 : http://vyvaks.wordpress.com/2006/05/27/does-runtimeexec-hangs-in-java/ –

+0

아마 프로세스의 교착 상태 일 것입니다. –

1

생성 과정은 주 스레드에 대한 아이 과정이다. 주 스레드가 끝나면 수동으로 명령을 실행하고 ctrlc을 누르거나 창을 닫은 것과 유사하게 프로세스가 종료됩니다.