2012-07-03 104 views
2

我試圖以編程方式從Java應用程序中檢索VM參數。VM參數:正確檢索並以編程方式檢索


做了一些研究之後,我遇到了似乎是一個完美的解決方案來:

ManagementFactory.getRuntimeMXBean().getInputArguments(); 

然而,當一個參數的內容包含空格字符,參數被拆分,最多隻該空格字符出現在列表中。

隨着例如VM參數-Xmx1024mb -javaagent:"C:/Users/Thompson Main/Documents/app.jar",將返回下面的列表:

[0] -> -Xmx1024mb 
[1] -> -javaagent:C:/Users/Thompson 
[2] -> Main/Documents/app.jar 
[3] -> -Dfile.encoding=Cp1252 

第二VM參數被切斷,由於含有不可避免的空間,我不能假定所有的用戶缺少空間文件路徑中的字符。在我看來,這個錯誤使得ManagementFactory和RuntimeMXBean無用。


我做更多的研究,但我一直沒能找到一個替代,以獲取VM參數在他們的Java 6中(感謝讓 - 菲利普全部讓我知道它在Java中的成功之路7)。

從應用程序中獲取VM參數的另一種方法是什麼?

+0

出於興趣,什麼是在索引'[2]' ? –

+0

@GregKopff我的不好,實際上有索引2和3的對象,我不小心從問題中忽略了 – Vulcan

回答

4

這是一個JDK錯誤,已在JDK 7中更正:RuntimeMXBean.getInputArguments() doesn't handle arguments with spaces properly

很好的解決:升級到Java 7

醜陋的解決方案:重建參數,但它睡前可怕:(

+0

謝謝,但是不幸的是我不會升級到Java 7,因爲它在我的應用程序的用戶羣中滲透率很低幸運的是,我需要分析的所有參數都將以.jar結尾,所以我可以重建它當前行以參數開頭(如「-javaagent:」),但不以「.jar」結尾。接受的答案。 – Vulcan

相關問題