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

如何从另一个类启动独立的java类?,java,process,jvm,classloader,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

我需要一个“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
    }
}

如果我从IDE启动每一个,我就会得到我想要的。但是现在我只想通过从class1启动class2来实现同样的效果(实际上,很多class2都是从class1启动的,但是得到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();
}
Class1(){
System.out.println(“class1”);
试一试{
c类=ClassLoader.getSystemClassLoader().loadClass(“test.Class2”);
c、 newInstance();
}catch(ClassNotFoundException |实例化Exception | IllegalacessException e){
e、 printStackTrace();
}
扫描仪sc=新的扫描仪(System.in);
sc.next();
}
我不在乎调用类2的构造函数还是它的主方法,只要它有效。但是我发现从1类调用main并不像类装入器在启动时那样特殊


我不知道;我不知道我是否需要一个新的进程、一个新的VM或一个新的类加载器,因为我不知道控制台是如何共享的,事实上我认为我不知道它们之间的区别。我知道系统退出将退出虚拟机,所以我想我需要启动一个新的虚拟机?我必须这样做吗?我在这个网站上看到了一些关于如何做的问题,但它非常丑陋,而且不存在;不要看起来很健壮。

在你的
Class1中试试这个:

ProcessBuilder pb=newprocessbuilder(“cmd”、“c”、“start”、“java”、“Class2”);
pb.start();
这将启动一个新控制台并运行
Class2.java


你可能需要一些不同于
/c
,这取决于你想要什么,

我不明白为什么人们会无缘无故地拒绝投票?在这种情况下,他们很可能有理由,但我不明白为什么人们会点击并拒绝投票,而不给出理由。如果你想让每个类在自己的控制台中运行,并且能够独立退出,每一个都需要一个过程。是的,但这和and是一样的。@PeterLawrey显然是这样。我问你怎么做,真正的答案是你说我需要一个新的流程。至于如何创建一个新的流程,之前已经回答过几次了。我不知道这个网站的规则是什么。
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();
}