Mackenzie
Mackenzie

Reputation: 1927

Does Java have an equivalent to C#'s Environment.GetCommandLineArgs()?

I know that I can get the command-line arguments in the "main" method, but I need to be able to get them indirectly.

Thanks for your help.

Upvotes: 7

Views: 2600

Answers (3)

Aleksey
Aleksey

Reputation: 91

Following expression is exactly what you want:

System.getProperty("sun.java.command")

Upvotes: 9

KitsuneYMG
KitsuneYMG

Reputation: 12901

You could write a wrapper to take the cli and re-format it to use -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
}

Of course, you could always just tell you users to invoke a bash/batch script with the proper -DA=true type arguments

Upvotes: -1

bmargulies
bmargulies

Reputation: 100051

You can list the threads, find the main thread, and crawl down the stack trace until you find the call to main, and pull out the args.

update a comment points out that this won't work all by itself, and I think the comment is correct. I misremembered the capabilities of stack introspection or mentally mixed in JVMTI.

So, here's plan B. Connect to yourself with JMX. The VM Summary MBean has the args.

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

All this having been said, what you should do is call System.getProperty and live with the need to use -D to pass parameters from the outside world down into your cave.

Upvotes: 2

Related Questions