2013-06-19 86 views
0

我創建了一個JAR文件,它接受3個參數並返回一個字符串,但即使它們正確,我的代碼似乎也無法識別參數值。Java JAR不識別cmd行參數

我指定的參數:

if (args.length > 1) 
{ 
    raftcode = args[0]; 
    Selection =args[1]; 
    Option = args[2]; 
    System.out.println("Getting arguments"); 

} 

我已經檢查了價值,他們是正確的,但程序不會進入if語句

if (Selection == "Sightings") 
{ 
      //Get sightings text 
} 

else if (Selection == "Captures") 
{ 
      //Get captures text 
} 

else if (Selection == "Myrafts") 
{ 
      //Get my rafts text 

} 
else if (Selection == "Other") 
{ 
      // Get other text 

} 

如果我沒有ARGS運行代碼它返回的字符串使用默認的測試變量,我可以輸出參數值。

:)

+8

比較兩個字符串值與字符串的'equals'方法,不能以''==。 – rgettman

+0

對於基元以外的任何東西,使用'=='都是不好的(對於'float'和'double'也是不好的,但是出於不同的原因)。你認爲'(「String」==「String」)'解決了什麼?如果你不確定,試試吧! 編輯:糟糕的例子,見下文。 – Shrike

+2

@Shrike這不是一個好的例子,因爲它可以工作(解析爲'true'),因爲編譯時字符串常量是[intern'd](http://docs.oracle.com/javase/7/docs/api/的java /郎/ String.html#實習生%28%29)。 – Boann

回答

3

您應該使用.equals,而不是==如下

if ("Sightings".equals(Selection)) 
{ 
     //Get sightings text 
} 
+4

或者更安全:'if(「Sightings」.equals(Selection))',以避免潛在的空指針異常。 – lreeder

+0

謝謝你現在完美!甚至沒有認爲這是==問題不會再使用它:) – Gemma

2

正如其他人說你應該與.equals沒有==比較字符串的什麼是錯的任何意見將是巨大的。如果您在任何地方都使用String.intern,則可以將字符串與==進行比較,但這樣做仍然存在風險,因爲如果您忘記了單個實例,它將會失敗。

如果您使用的命令行參數廣泛看看作爲Commons CLI