2012-07-03 134 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

相关问题