2010-12-28 5 views
0

그 배치 닫지 않고 다시 자바 프로그램에 컨트롤을 얻는 방법 : 배치 파일을 호출(영원히 실행) 서버의 배치 파일을 실행하고 나는 자바 프로그램이

Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat"); 
int exitVal = proc.waitFor(); 
System.out.println("Process exitValue: " + exitVal); 

"callServer을 .bat ":

@echo on 
cd bin 
call shutdown 2011 
call server.bat 

이 배치 파일은 프로그램 중에 영원히 실행되어야하는 서버 배치 파일 인 server.bat 파일을 호출합니다. server.bat를 시작한 후에 다른 것들을 할 자바 프로그램에 대한 제어권을 되돌리고 싶습니다. 많은 시간을 들여서 해결책을 찾지 못해서 제발 도와주세요.

+0

나는 이것이 새로운 스레드 또는 프로세스를 만드는 것을 포함한다고 생각합니다. 내가 할 수있는 최선을 – WalterJ89

답변

4

다른 스레드에서 프로세스를 실행하는 것처럼 간단 할 수 있습니다. 이것은 별도의 스레드에서 프로세스를 실행하고 배치 파일이 실행되는 동안 주 스레드가 계속 할 수 있습니다 :

Thread thread = new Thread() { 
    public void run() { 
     Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat"); 
     int exitVal = proc.waitFor(); 
     System.out.println("Process exitValue: " + exitVal); 
    } 
}; 

thread.start(); 
+0

감사합니다 존! 나는 그것을 시도하고 곧 결과를 게시 할 것이다 – Raj

+0

나는 대답을 얻었다 ;;; callServer.bat 대신 "start"callServer.bat를 사용해야합니다. 시간 내 주셔서 감사합니다. – Raj

0

당신은 '원 있도록 데몬 스레드가 될 수있는 별도의 스레드에서 배치 파일을 호출 할 수 있습니다 다른 모든 사용자 스레드가 끝나지 않을 때까지 종료하십시오.

프로그램이 여전히 있다면 그것은 분명 작동하지 않습니다하지만 당신이

+0

예 아만, 나는이 길로 갈 필요가 있다고 생각한다. 잘 쓰레드로 시도 할 것이다. – Raj

0

당신은 프로그램이 종료를 기다리지 않고 종료 값을 얻기 위해 Process.exitValue() 함수를 사용할 수있는 사용의이되기를 바랍니다 달리는.

당신은 너무 당신이 뭔가 할 수 원한다면 : 추한의

Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat"); 
while(condition){ 
    try{ 
     exitVal = proc.exitValue(); 
     System.out.println("Process exitValue: " + exitVal); 
    } 
    catch(Exception e){/*do nothing*/} 
    //other code goes here 
} 

종류를,하지만 당신은 할 수 당신이 스레딩 편안하지 않으면 그. 그러나 스레드를 사용하는 것이 올바른 방법 일 것입니다.

+0

감사합니다. Chad !!! 하지만 이건 내 문제를 해결하지 못할거야. – Raj

관련 문제