2014-06-23 1 views
0

필요한 것은 자바 코드에서 다른 jar 파일 안에있는 jar 파일을 실행하는 것입니다. ChatSystemClient.jar 파일에 넣은이 turnOffClient.jar 파일을 가지고 있으며, xClient.jar 메인 클래스 코드에서 turnOffClient.jar 파일을 실행 (시작, 실행)하고 싶습니다. 내가 시도 : 또한jar 메인 클래스에서 두 번째 코드 (jar) 실행하기

Runtime.getRuntime().exec(this.getClass().getResource("/jars/TurnOffClient.jar").toString()); 

:

TurnOffClient.main(args); 

작동하는 것 같다하지만 내가 처음 자바 응용 프로그램을 닫을 때 두 번째 내가 원하지 않는 너무 닫습니다. 내 디렉토리 : https://imagizer.imageshack.us/v2/253x254q90/856/ztuz.png

답변

2

이것은 잘못된 프로그래밍 방법이며, 대신 두 프로그램을 모두 호출하는 새 클래스를 만듭니다.

예 :

Program a; 
Program b; 

    a.run(); 
    while(a.isAlive()){ 
     if(/*we need to run program b*/){ 
     b.run(); 
     break; 
     } 

    } 
+0

* 정말로 * a.isAlive의 긴밀한 루프를 실행 하시겠습니까? 그건 나에게 이익을 위해 프로세서를 묶는 것 같다. – tucuxi

+0

@tucuxi 좋은 점은 실제로, 아마 if 문을 add하면 ThreadPleep (100); – nafas

+0

나는 이렇게했다 : \t public static void main (String [] args) { \t \t Thread t = new Thread (new ChatSystemClient()); \t \t t.start(); \t \t 새로운 TurnOffClient(). start(); \t} 새 스레드를 만들었습니다. 두 프로그램을 동시에 실행해야합니다. 하지만 둘 중 하나를 닫으면 둘 다 닫히고 클릭 한 사람 만 닫으려고합니다. – ESipalis

0

는 이러한 그래픽 응용 프로그램이 있습니까? (응용 프로그램을 여는 응용 프로그램 B)을 "닫을"때 실제로 닫지는 않지만 응용 프로그램 B이 실제로 닫힐 때까지 백그라운드에서 계속 작업 할 수 있습니다. B이 시작되면

, JVM이 단지 B의 특별 클래스를 인스턴스화한다 (그것을 BMain 전화)과 public void main(String[] args) 메소드를 호출. 그 창이 닫힐 때 프로세스가 즉시 종료되지 않는 경우

BMain.main("my arguments here"); 

이 (사냥 및 JFrame.EXIT_ON_CLOSE을 제거 : 더 당신이 (대신 getRuntime().exec()를 통해의) 자신의 코드에서 직접 메소드를 호출 할 수 없습니다 이유가 없습니다 의 경우) 당신이 스윙을 사용하는 가정하고, 호출 B의 주요 위와 는 "폐쇄"경우에도가 정상적으로 실행됩니다 B.

관련 문제