簡體   English   中英

如何從另一個類啟動一個獨立的java類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM