Wie kann man beim Übergeben eines -D-Parameters in Java die Befehlszeile richtig schreiben und dann über Code darauf zugreifen?
Zum Beispiel habe ich versucht, so etwas zu schreiben ...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
Und dann nenne ich es so ...
java -jar myApplication.jar -Dtest="true"
Ich erhalte jedoch eine NullPointerException. Was mache ich falsch?
java
command-line
parameters
Ryan Berger
quelle
quelle
compareToIgnoreCase
anstelle vonequalsIgnoreCase
Gebietsschema-Agnostikern. Andernfalls könnten Sie unter anderem auf das türkische Vier-Is-Problem stoßen.Antworten:
Ich vermute, das Problem ist, dass Sie das "-D" nach dem setzen
-jar
. Versuche dies:Über die Kommandozeilenhilfe:
Mit anderen Worten, die Art und Weise, wie Sie es im Moment haben, wird
-Dtest="true"
als eines der Argumente behandelt, an die übergeben werden muss,main
anstatt als JVM-Argument.(Sie sollten wahrscheinlich auch die Anführungszeichen löschen, aber es kann trotzdem funktionieren - es hängt wahrscheinlich von Ihrer Shell ab.)
quelle
Das sollte sein:
Dann gibt Folgendes den Wert zurück:
Der Wert könnte jedoch
null
so sein, dass Sie sich vor einer Ausnahme schützen, indem Sie Folgendes verwendenBoolean
:Beachten Sie, dass die
getBoolean
Methode den Systemeigenschaftswert delegiert und den Code vereinfacht an:quelle
Integer.getInteger("test"); Long.getLong("test")
Vorausgesetzt, Sie haben-Dtest=123
Sie geben Ihrem Programm Parameter statt Java. Verwenden
stattdessen.
Erwägen Sie die Verwendung
die NPE zu vermeiden. Aber verwenden Sie " Yoda-Bedingungen " nicht immer ohne nachzudenken, manchmal ist das Werfen der NPE das richtige Verhalten und manchmal so etwas
ist richtig (Standard ist true). Eine kürzere Möglichkeit ist
Aber wenn man keine doppelte Negation verwendet, ist es nicht weniger schwer, sie falsch zu verstehen.
quelle
System.getProperty("test", "true").equalsIgnoreCase("true")
wäre der bessere Weg, um die letzte Bedingung zu schreiben.Boolean.getBoolean("test");
ist eine andere Option. Siehe .