2011-11-26 117 views
2

問:有沒有辦法讓一個java程序在Windows上像mac一樣運行兩次?在Mac上多次運行Java程序

+0

不能從同一個jvm啓動兩個不同的進程,在這種情況下您應該探索ProcessBuilder。 – Scorpion

+0

這似乎並不是在OS X上構建應用程序的正確方式。您應該做的只有一個「應用程序」 - 用戶界面的進程。您可以使用「幫助程序」進程在後臺執行一些任務,如下載。 – millimoose

+0

你究竟跑了兩次是什麼意思?一旦第一個程序結束,或者兩個程序同時運行,是否需要啓動第二個程序?具體來說,你試圖重新創建Windows呢? – BitFiber

回答

5

您不指定是否要啓動簡單的.jar或應用程序包,所以我將給出兩個示例。要在OS X上運行多個應用程序包實例,可以使用以下技巧;打開終端並使用以下命令啓動應用程序:

open -n /path/to/your/java.app 

每次調用此命令時,都會打開一個新實例。

注意:僅僅因爲可以啓動多個實例並不意味着這樣做是個好主意。確保您不會遇到使用同一文件對多個實例進行併發寫入訪問的麻煩。

如果你想運行一個罐子,你可以簡單地調用

java -jar /path/to/your/java.jar 

多次啓動了多個實例。

從OSX下的Java應用程序中啓動了Java的應用程序,你必須做這樣的事情:

在簡單的罐子的情況下:

File jarFile = new File("/path/to/your/jarFile.jar"); 
Runtime.getRuntime().exec(new String[] { "java", "-jar", jarFile.getAbsolutePath() }); 

在這種情況下的應用程序包:

File jarFile = new File("/path/to/your/jarFile.app"); 
final String[] command = { "open", "-n", jarFile.getAbsolutePath() }; 
Runtime.getRuntime().exec(command); 
0

我真的不明白這個問題。但是,爲什麼不將它抽象爲一種方法,而不是將它命名爲程序並將該子程序調用兩次。或者產生兩個線程?

0

也許這是一個有趣的問題,但我會打開兩個終端窗口,一旦每個終端上運行它...

+0

它的工作方式,但由於某種原因,當你從程序內部調用程序,它不起作用 –

0

這取決於你的Java程序的性質。如果你的程序作爲服務器和客戶端運行,當你運行多個實例時它可能會導致問題。在許多服務器程序中,它使用固定的端口號來簡化設置和實現。由於給定的端口號不能被多個應用程序使用,因此除非您可以更改應用程序設置中的端口號,否則無法打開該應用程序的多個實例。

許多Java應用程序使用這個技巧來阻止用戶通過檢查某個端口是否正在使用來打開其程序的多個實例。如果是這種情況,那麼你不能運行該程序的多個實例。

對於其他不使用端口或端口的Java應用程序不會崩潰,您可以通過終端打開兩次或更多。

+0

在我的程序中,用戶輸入所需的端口號 –

+0

你可以不是兩次運行呢?問題是什麼? – gigadot

+0

當你雙擊一個應用程序圖標時,它會運行程序,但是如果它已經運行,它會把你帶到它的窗口>。< –

0

假設您正在系統上運行客戶端版本的代碼並嘗試連接到主機。首先,你需要讓服務器在兩臺機器上運行,B和C在你的情況下運行。其次,您使用的客戶端代碼應該是讀取連接的IP地址和端口。它不應該被硬編碼,否則你將不得不改變代碼並重新編譯服務器B.這應該對你有所幫助。

猜我已經回答了您的查詢。 :)