2016-09-24 96 views
-1

我需要一個「主」類來創建其他獨立的類實例。他們是獨立的,他們有自己的控制檯,如果我關閉1,其他人不關閉。如何從另一個類中啓動一個獨立的java類?

例子:我有這2類

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 1中的許多class 2,但獲得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並不是什麼特別的,就像類加載器在啓動時那樣。

我不知道我是否需要一個新的進程,新的虛擬機或新的類加載器,因爲我不知道如何共享控制檯,實際上我不認爲我知道差異。我知道系統退出將退出虛擬機,所以我認爲我需要啓動一個新的虛擬機?我一定要嗎?我在這個網站上看到了幾個關於如何去做的問題,但它非常難看,而且看起來不健壯。

+0

我不明白爲什麼人們沒有理由downvote? – Mark

+0

在這種情況下,他們最有可能有一個理由,但我不明白爲什麼人們反對投票並且沒有理由。 –

+1

如果您希望每個類都在其自己的控制檯中運行,並且能夠獨立退出,則需要爲每個類執行一個過程。 –

回答

1

Class1試試這個:

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

這會啓動新的控制檯和運行Class2.java

你可能需要的東西比/c不同的,取決於你想要什麼,check this out.

+1

是的,但這是一樣的http://stackoverflow.com/questions/1229605/is-this-really-the-best-way-to-start-a-second-jvm-from-java-code和http: //stackoverflow.com/questions/480433/launch-jvm-process-from-a-java-application-use-runtime-exec和http://stackoverflow.com/questions/636367/executing-a-java-application-在-A-單獨處理。 – Mark

+0

@馬克,所以你說你已經有你的答案了? –

+0

@PeterLawrey顯然如此。我問如何做一些事情,真正的答案是你說我需要一個新的過程。至於如何創建一個新的流程,它已經被回答了幾次。我不知道這個網站的規則是什麼。 – Mark