1

我想启动一个包含在我必须使用的 *.jar 中的 main(String args[]) 方法(不要问,我已经厌倦了)。

//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

5 回答 5

4
new Thread(new Runnable() {
    public void run() {
        MainApp.main(new String[] { "-port", "8080" });
    }
}).start();
于 2013-10-22T08:32:51.060 回答
2

该类是否在另一个 jar 文件中无关紧要。只要包含 clas 的 jar 在 classpath 中,就可以使用它。和main所有其他静态方法一样,它是一个静态方法,因此,要调用它,请使用类的名称,后跟方法的名称。它需要一个字符串数组作为参数,因此您需要将一个字符串数组传递给它。所以假设MainApp在包里com.foo.bar,你只需要

import com.foo.bar.MainApp;

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

这不会在另一个线程中调用 main 方法(不知道你为什么想要那个)。如果你想这样做,那么创建一个线程并MainApp.main()run()线程或 Runnable 的方法调用。

于 2013-10-22T08:33:41.687 回答
1

您可以将 .jar 添加到类路径中,然后加载该类并调用静态 Main() 方法。IE:

String[] args = new String[] {"-port", "8080"};
MainApp.main(args);
于 2013-10-22T08:32:18.123 回答
1

两种方法:

  1. 如果您不介意在进程中运行它,那么您可以将其运行为 SomeJava.MainApp.main({"-port", "8080"}) ...前提是 MainApp 类正在以这种方式寻找参数.

  2. 如果您知道为运行该 jar 而传递的命令行参数,那么您可以使用 Runtime.exec() 执行它

希望有帮助。

于 2013-10-22T08:33:36.800 回答
0

您可以尝试使用 Process 类来启动 jar 应用程序。

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

strPath 将是您的 jar 文件的路径,因此 . 您可以将其包含在 Thread 类中,以使其在单独的线程中运行。

于 2013-10-22T08:34:39.100 回答