Lors du passage d'un paramètre -D en Java, quelle est la bonne façon d'écrire la ligne de commande puis d'y accéder à partir du code?
Par exemple, j'ai essayé d'écrire quelque chose comme ça ...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
Et puis l'appelant comme ça ...
java -jar myApplication.jar -Dtest="true"
Mais je reçois une NullPointerException. Qu'est-ce que je fais mal?
java
command-line
parameters
Ryan Berger
la source
la source
compareToIgnoreCase
au lieu deequalsIgnoreCase
pour les identifiants indépendants des paramètres régionaux; Sinon, vous risquez de rencontrer le problème turc des quatre est, entre autres.Réponses:
Je soupçonne que le problème est que vous avez placé le "-D" après le
-jar
. Essaye ça:Depuis l'aide de la ligne de commande:
En d'autres termes, la façon dont vous l'avez actuellement sera traitée
-Dtest="true"
comme l'un des arguments à passer aumain
lieu d'un argument JVM.(Vous devriez probablement aussi laisser tomber les guillemets, mais cela peut bien fonctionner de toute façon - cela dépend probablement de votre shell.)
la source
Ça devrait être:
Ensuite, ce qui suit renverra la valeur:
La valeur pourrait être
null
, cependant, alors protégez-vous contre une exception en utilisant unBoolean
:Notez que la
getBoolean
méthode délègue la valeur de la propriété système, simplifiant le code à:la source
Integer.getInteger("test"); Long.getLong("test")
supposant que vous avez-Dtest=123
Vous donnez des paramètres à votre programme à la place de Java. Utilisation
au lieu.
Pensez à utiliser
pour éviter le NPE. Mais n'utilisez pas toujours les " conditions Yoda " sans réfléchir, parfois lancer le NPE est le bon comportement et parfois quelque chose comme
est correct (fournissant la valeur par défaut true). Une possibilité plus courte est
mais ne pas utiliser la double négation ne rend pas les malentendus moins difficiles.
la source
System.getProperty("test", "true").equalsIgnoreCase("true")
serait la meilleure façon d'écrire la dernière condition.Boolean.getBoolean("test");
est une autre option. Voir .