如何从另一个类启动一个独立的java类?

时间:2016-09-24 09:59:03

标签: java process jvm classloader

我需要一个“main”类来创建其他独立的类实例。他们是独立的,因为他们有自己的控制台,如果我关闭1,其他人不会关闭。

示例:我有这两个类

public class Class1 {

    public static void main(String[] args) {
        new Class1();
    }

    Class1() {
        System.out.println("class1");
        Scanner sc = new Scanner(System.in);
        sc.next(); // just to stop runtime from exiting. it suspends it
    }
}

public class Class2 {

    public static void main(String[] args) {
        new Class2();
    }

    Class2() {
        System.out.println("class2");
        Scanner sc = new Scanner(System.in);
        sc.next();  // just to stop runtime from exiting. it suspends it
    }
}

如果我从我的IDE启动每一个,我得到我想要的。但是现在我只想从class1启动class2(实际上很多类2来自class 1但得到1会让我得到其他的)。我尝试使用类加载器但它不起作用只是共享相同的控制台而关闭1关闭另一个。或者我做错了。

Class1() {
    System.out.println("class1");
    try {
        Class<?> c = ClassLoader.getSystemClassLoader().loadClass("test.Class2");
        c.newInstance();
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
    }
    Scanner sc = new Scanner(System.in);
    sc.next();
}

我不在乎我是否只要它可以调用类2的构造函数或它的主方法。但是我发现从1类调用main并不是特别的,就像类启动器在启动时那样。

我不知道我是否需要新进程,新VM或新的类加载器,因为我不知道如何共享控制台,实际上我不认为我知道差异。我知道系统退出将退出VM,所以我想我需要启动一个新的VM?我一定要吗?我在这个网站上看到了几个关于如何做到这一点的问题,但它非常难看,看起来并不健全。

1 个答案:

答案 0 :(得分:1)

Class1

中试试这个
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "java", "Class2");
pb.start();

这将启动一个新的控制台并运行您的Class2.java

您可能需要与/c不同的内容,取决于您的需求,check this out.