[英]How to launch an independent java class from another class?
我需要一個創建其他獨立類實例的“主”類。 他們是獨立的,因為他們有自己的控制台,如果我關閉 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 來獲得相同的結果(實際上很多 class 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 的構造函數或其 main 方法,只要它有效。 但我發現從 1 個類調用 main 並不像類加載器在啟動時那樣特殊。
我不知道我是否需要一個新進程、一個新的 VM 或一個新的類加載器,因為我不知道控制台是如何共享的,實際上我認為我不知道它們之間的區別。 我知道系統退出會退出虛擬機,所以我想我需要啟動一個新的虛擬機? 我一定要嗎? 我在這個網站上看到了幾個關於如何做的問題,但它非常難看,而且看起來並不健壯。
在你的Class1
試試這個:
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "start", "java", "Class2");
pb.start();
這將啟動一個新控制台並運行您的Class2.java
。
您可能需要與/c
不同的東西,這取決於您想要什么,請查看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.