2010-06-15 36 views
0

我正在編一個類似編輯器的程序。如果用戶在主窗口中選擇File-> Open,我想用所選文件名作爲參數來啓動編輯器進程的新副本。但是,我需要知道使用什麼命令啓動第一個進程:Java重生進程

java -jar myapp.jar blabalsomearguments // --- need this information 
> Open File (fileUrl) 
> exec("java -jar myapp.jar blabalsomearguments fileUrl"); 

我不是尋找一個過程中的解決方案,我已經實施了。我希望獲得獨立流程帶來的好處。

+0

如果沒有,你總是可以只獲取參數從主過去了,而不是產生一個新的進程,產生另一個窗口。 – 2010-06-15 15:17:37

+0

我已經創建了另一個窗口,請參閱上面的註釋。 – 2010-06-15 21:34:36

回答

1

由於您正在啓動Java - > Java,因此可以使用現有類路徑在命令行上設置類路徑。這種類型的東西在開發環境中也非常好。

ProcessBuilder selfLauncher = new ProcessBuilder(
"java", "-cp", System.getProperty("java.class.path"), 
"com.my.mainClass"); 
selfLauncher.start(); 

更新: 對於可執行的JAR文件,你將有一個classpath這簡直是對jar文件本身的相對路徑。如果你想要命令行參數,你必須從main保存它們,並在啓動時重新應用它們。

您可以通過將以下程序打包到jar中來查看。我不確定如果在可執行jar文件中有jar文件會發生什麼情況。他們可能會出現在classpath中。

public class TestJarPath { 
    public static void main(String args[]) throws Exception { 
     for (String s : args) 
     System.out.print("[" + s + "] "); 
     System.out.println(); 

     String cp = System.getProperty("java.class.path"); 
     for (String s : cp.split(";")) 
      System.out.println(s); 
    } 
} 

java -jar ..\tst.jar X,所得到的輸出,如:

[X] 
..\tst.jar 
+0

此外,使用System.getProperty(「java.home」)來獲取當前運行的JRE基本目錄(Sun JVM) – ddimitrov 2010-06-15 15:41:45

+0

啊,是的,這也是一個很好的技巧(如果你有不同的開發環境JVM) – Justin 2010-06-15 16:26:45

+0

我想這個會工作。關於虛擬機參數呢? – 2010-06-15 21:35:13

0

如果一切都失敗,請嘗試編寫批處理/外殼腳本來啓動您的應用程序。在Windows中,您可以將%CmdCmdLine%傳遞給Java以獲取整個命令行。

http://www.robvanderwoude.com/parameters.php

0

據我所知是沒有出現移植的方式來獲得這些信息。我在gcj運行時發現了一個屬性,但我懷疑這會覆蓋很大一部分用戶。

我覺得接受的做法是「嘗試,並祈禱」:

希望這是路徑上,(路徑是可用的,這樣可以檢查)

如果沒有,檢查JAVA_HOME是定義,並用它來查找java。

如果不檢查所有操作系統上您收到錯誤報告的最可能位置。

好吧,這很麻煩......最好檢查JAVA_HOME和路徑,並要求用戶明確配置JVL,如果失敗。