2013-10-22 3 views
0

* .jar에 포함 된 main (String args []) 메서드를 시작하고 싶습니다. 사용하지 않아도됩니다.다른 항아리에서 args를 사용하여 main 메소드를 실행하는 방법은 무엇입니까?

//this is my own class 
class MyInitClass { 
    public static void main(String args[]) { 
      SomeJar.MainApp("-port", 8080); 
    } 
} 


//this is a keen developers class 
class MainApp { 
    public static void main(String args[]) { 
     //makes use of the arguments, like starting a socket server 
    } 
} 

내 자신의 클래스에서 이러한 주 메서드를 호출하는 가장 좋은 방법은 무엇입니까?

답변

4
new Thread(new Runnable(){ 
    public void run(){ 
     MainApp.main(new String[]{"-port", 8080}); 
    } 
}).start(); 
1

클래스 경로에 .jar를 추가 한 다음 클래스를로드하고 정적 Main() 메소드를 호출 할 수 있습니다. 예 : 그 일의

String[] args = new String[] {"-port", "8080"}; 
MainApp.main(args); 
1

두 가지 방법 : 당신이 과정에서 실행 괜찮다면

  1. , 다음 SomeJava.MainApp.main로 실행할 수 있습니다 ({ " -port ","8080 "}) ... MainApp 클래스가 그런 방식으로 인수를 찾고 있다면 제공됩니다.

  2. 그 항아리를 실행하기위한 전달받을 명령 줄 매개 변수를 알고 있다면, 당신은

희망하는 데 도움이() Runtime.exec의를 사용하여 실행할 수 있습니다.

2

클래스가 다른 jar 파일에 있는지 여부는 관련이 없습니다. clas를 포함하는 항아리가 classpath에 있다면, 그것을 사용할 수 있습니다. 그리고 main은 다른 모든 정적 메소드와 마찬가지로 정적 메소드이기 때문에 호출하려면 메소드 이름 앞에 클래스 이름을 사용하십시오. String 배열을 인수로 취하므로 String 배열을 전달해야합니다. 그래서 MainApp 패키지 com.foo.bar에있는 가정, 당신은 (당신이 있음을 원하는 이유는 확실하지 않은) 다른 스레드의 주요 methd를 호출하지 않습니다

import com.foo.bar.MainApp; 

class MyInitClass { 
    public static void main(String args[]) { 
     MainApp.main(new String[] {"-port", "8080"}); 
    } 
} 

이 필요합니다. 원하는 경우 스레드를 만들고 스레드 또는 실행 가능 메소드 run()에서 MainApp.main()을 호출하십시오.

0

Process 클래스를 사용하여 jar 응용 프로그램을 시작할 수 있습니다.

strPath = "java -jar <path>" 
Process proc = Runtime.getRuntime().exec(strPath); 

strPath는 jar 파일 경로입니다. 이 클래스를 Thread 클래스에서 둘러 싸서 별도의 스레드에서 실행할 수 있습니다.

관련 문제