Java是否与C#的Environment.GetCommandLineArgs()等效?

时间:2011-01-22 02:19:43

标签: java command-line-arguments

我知道我可以在“main”方法中获取命令行参数,但我需要能够间接

感谢您的帮助。

3 个答案:

答案 0 :(得分:8)

以下表达式正是您想要的:

System.getProperty( “sun.java.command”)

答案 1 :(得分:2)

您可以列出线程,找到主线程,然后向下爬行堆栈跟踪,直到找到对main的调用,然后拔出args。

更新评论指出这不会全部起作用,我认为评论是正确的。我错误地记录了JVMTI中堆栈内省或精神混合的能力。

所以,这是计划B.用JMX连接自己。 VM Summary MBean具有args。

Connection name: 
pid: 77090 com.basistech.jdd.JDDLauncher -config src/main/config/benson-laptop-config.xml

所有这些都已经说过,你应该做的就是调用System.getProperty并且需要使用-D将参数从外部世界传递到你的洞穴。

答案 2 :(得分:-1)

您可以编写一个包装器来获取cli并将其重新格式化为使用-DPROP = VAL

int main(int argc, char*argv[])
{
std::vector<std::string> in (argv+1,argv+argc), out();

out.push_back("java.exe");
out.push_back("-cp");
out.push_back("my-jar.jar");
out.push_back("main.class")

for( auto it = in.begin(); it!=in.end(); ++in)
{
//process CLI args. turn "-abc","BLAH" into "-Darg.a=true","-Darg.b=true","-Darg.c=BLAH" and push to out
//Do additional processing. Maybe evn use get_opt() or Boost.ProgramOptions
}
//use exec or CreateProcess to launch java with the proper args
//or even use something like WinRun4J's methods to load the jvm.dll
//Then your program shows up as "MyExe.exe" instead of "java.exe"

//Use System.getProperty("arg.a","false") to get the value of a
}

当然,您总是可以告诉用户使用正确的-DA = true类型参数调用bash / batch脚本