2010-08-13 5 views
0

예를 들어,Java에서 배치 실행

Java 클래스 JavaClass1.java가 있습니다.이 Java 클래스에서 2 개의 배치 파일을 실행 중입니다. 각 .bat 파일은 다른 Java 응용 프로그램을 시작합니다. 이 두 개의 다른 앱은 완료하는 데 각각 15 시간이 걸리고 서로 의존적이지 않습니다.

이 문제를 어떻게 해결할 수 있습니까? 나는 하나를 완료 할 때까지 기다릴 필요가 없기 때문에 나는 다른 것을 시작해야한다. 나는 동시에 그것을 할 수있다.

사람들이 출력 스트림, 입력 스트림 및 오류 스트림을 전달하는 것에 대해 이야기하고있는 것을 발견했습니다. 오류가 처리 될 때까지 기다렸다가 각각 15 시간을 기다려야합니다. 나는 그 일을하고 싶지 않다.

어떨까요? 제발 제안 해주세요. 감사합니다

답변

2

각각의 .bat를 실행하기위한 메커니즘을 자체 스레드에 배치 한 다음 각 스레드를 시작하십시오.

new Thread(new Runnable() { 
     @Override 
     public void run() { 
      //Launch first bat. 
     } 
    }).start(); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      //Launch second bat. 
     } 
    }).start(); 
+0

스레드를 어떻게 처리할까요? 걱정해야합니까? – user234194

+0

일부 코드를 게시하도록 편집했습니다. 방금 익명의 수업을 사용했습니다. 그래서 분명히 걱정할 필요가 없습니다. – Mike

+0

내가 만든 스레드를 파괴해야 해. 미안하지만 물어 스레드에 대해 많이 몰라. 또는 위의 코드 스 니펫에 대한 결과에 대해 설명 할 수 있습니까? – user234194

1
Runtime.getRuntime().exec(new String[]{"cmd","/c","java -jar app1.jar"}); 
Runtime.getRuntime().exec(new String[]{"cmd","/c","java -jar app2.jar"}); 

그냥 바로 다음 응용 프로그램을 호출 할 수 있도록이 차단되지 않습니다, 당신은 프로세스의 반환 코드를 얻을 수 process.waitFor()를 호출하지 않으면 런타임, 서비스를 실행 사용합니다. 앱의 리턴 코드를 원하면 Mike로 각 스레드에서 app을 실행하십시오.

+0

차단할 때와 차단하지 않을 때 나를 설명해 주시겠습니까? 다른 배치를 시작할 .bat를 실행하고 싶습니다. 나는 똑같이 할 수 있고 방해하지 않을 것이다. plz 내가 이것에 관해서 새로운 것으로 설명하십시오. – user234194

+0

Runtime.exec (...)을 사용하여 새 하위 프로세스를 만들면 프로세스 객체를 반환하고 하위 프로세스 반환 코드를 알고 싶다면 종료 할 때까지 기다려야합니다. 받은 프로세스 객체로 waitFor()를 호출하십시오. waitFor()는 스레드가이 메소드를 호출하여 하위 프로세스가 자식 프로세스를 종료하게합니다. 서로 독립된 2 개의 앱을 가지고 있습니다. 종료 코드를 듣지 않아도되고 waitFor()를 호출하지 않으면 차단되지 않으며 즉시 다음 exec를 호출 할 수 있습니다. – secmask