Rya*_*ger 142 java parameters command-line
在Java中传递-D参数时,编写命令行然后从代码中访问它的正确方法是什么?
例如,我试过写这样的东西......
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
然后像这样称呼它......
java -jar myApplication.jar -Dtest="true"
Run Code Online (Sandbox Code Playgroud)
但是我收到了NullPointerException.我究竟做错了什么?
Jon*_*eet 234
我怀疑的问题是,你已经把"-D" 之后的-jar.试试这个:
java -Dtest="true" -jar myApplication.jar
Run Code Online (Sandbox Code Playgroud)
从命令行帮助:
java [-options] -jar jarfile [args...]
Run Code Online (Sandbox Code Playgroud)
换句话说,你现在获得它的方式将被-Dtest="true"视为传递给它main而不是作为JVM参数的参数之一.
(您可能也应该删除引号,但它仍然可以正常工作 - 它可能取决于您的shell.)
Ala*_*ier 43
那应该是:
java -Dtest="true" -jar myApplication.jar
Run Code Online (Sandbox Code Playgroud)
然后以下将返回值:
System.getProperty("test");
Run Code Online (Sandbox Code Playgroud)
null但是,该值可能是使用以下内容防止异常Boolean:
boolean b = Boolean.parseBoolean( System.getProperty( "test" ) );
Run Code Online (Sandbox Code Playgroud)
请注意,该getBoolean方法委托系统属性值,将代码简化为:
if( Boolean.getBoolean( "test" ) ) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
maa*_*nus 22
您正在为程序提供参数而不是Java.使用
java -Dtest="true" -jar myApplication.jar
Run Code Online (Sandbox Code Playgroud)
代替.
考虑使用
"true".equalsIgnoreCase(System.getProperty("test"))
Run Code Online (Sandbox Code Playgroud)
避免NPE.但是不要总是不加思索地使用" 尤达条件 ",有时候抛出NPE是正确的行为,有时甚至是类似的行为
System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true")
Run Code Online (Sandbox Code Playgroud)
是对的(提供默认值为true).更短的可能性是
!"false".equalsIgnoreCase(System.getProperty("test"))
Run Code Online (Sandbox Code Playgroud)
但不使用双重否定并不会使其更难以误解.