如何从另一个 class 启动一个独立的 java class?
How to launch an independent java class from another class?
我需要一个 "main" class 来创建其他独立的 class 实例。他们是独立的,因为他们有自己的控制台,如果我关闭 1,其他人不会关闭。
示例:我有这 2 个 classes
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 来获得相同的结果(实际上很多 class2 来自 class1,但是获得 1 会让我得到其他的)。我尝试使用 class 加载程序,但它不工作只是共享同一个控制台并且关闭 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();
}
我不在乎我是否调用class 2 的构造函数或其主要方法,只要它能工作即可。但我发现从 1 class 调用 main 并不像 class 加载器在启动时那样调用。
我不知道我是否需要新进程、新 VM 或新 class 加载器,因为我不知道控制台是如何共享的,实际上我认为我不知道差异。我知道系统退出会退出 VM,所以我想我需要启动一个新的 VM?我一定要吗?我在这个网站上看到了几个关于如何做到这一点的问题,但它非常丑陋,而且看起来不稳健。
在您的 Class1
中试试这个:
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "java", "Class2");
pb.start();
这将启动一个新控制台和 运行 您的 Class2.java
。
您可能需要不同于 /c
的东西,取决于您想要什么,check this out.
我需要一个 "main" class 来创建其他独立的 class 实例。他们是独立的,因为他们有自己的控制台,如果我关闭 1,其他人不会关闭。
示例:我有这 2 个 classes
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 来获得相同的结果(实际上很多 class2 来自 class1,但是获得 1 会让我得到其他的)。我尝试使用 class 加载程序,但它不工作只是共享同一个控制台并且关闭 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();
}
我不在乎我是否调用class 2 的构造函数或其主要方法,只要它能工作即可。但我发现从 1 class 调用 main 并不像 class 加载器在启动时那样调用。
我不知道我是否需要新进程、新 VM 或新 class 加载器,因为我不知道控制台是如何共享的,实际上我认为我不知道差异。我知道系统退出会退出 VM,所以我想我需要启动一个新的 VM?我一定要吗?我在这个网站上看到了几个关于如何做到这一点的问题,但它非常丑陋,而且看起来不稳健。
在您的 Class1
中试试这个:
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "java", "Class2");
pb.start();
这将启动一个新控制台和 运行 您的 Class2.java
。
您可能需要不同于 /c
的东西,取决于您想要什么,check this out.