2009-12-21 73 views
1

我有一個創建一個邏輯類的一個實例的主要方法運行我的程序不能在命令行

public static void main(String[] args) { 
     try { 
      Logic logic = new Logic(args[0]); 
      ....... do some stuff here 

     } catch (Exception e) { 
      System.out.println("Error Encountered Details: " + e); 
     } 
    } 

的事情是,該方案需要一個CSV文件來運行,我已經把它在同目錄中的.jar文件,但是當我在命令行中運行我只是得到java.lang.arrayindexoutofbounds(0)錯誤

我在做什麼錯

感謝

+0

如果你的程序需要一個外部文件你就需要在最少嘗試訪問代碼中的某處。如果你發佈的人會更好地幫助你。 – 2009-12-21 14:07:24

回答

7

你的命令行應該是這樣的:

java -cp {name_of_jar} {name_of_class} {name_of_csv} 

它看起來像你不提供.csv文件名(會去args[0])?

上面假定主類沒有在你的.jar清單中定義。如果,然後使用:

java -jar {name_of_jar} {name_of_csv} 

這是一個很好的做法,檢查args[]陣列所需的信息,順便說一句,而產生這樣的消息「缺少.csv文件名」或類似避免討厭的異常/堆棧跟蹤。

1

您需要將參數傳遞給您的程序。 new Logic(argv[0])表明,該方案預計至少一個命令行參數,就像這樣:

java -jar ... somearg 
1

你需要調用一個命令行類似的應用程序:

java -jar MyAppJar myFile.csv 

。你得到那個錯誤信息是因爲你沒有提供文件名。

1

args [0]不會包含任何東西,除非您將它放在命令行上,並且您將得到索引超出界限的錯誤。你的命令應該是這樣的......

java -jar myjar.jar c:\myfile.csv 

ARGS [0]將包含隨後C:\ myfile.csv,你不必擔心它的位置。

1

你不檢查參數是否有任何項目。在嘗試訪問它之前,請務必檢查參數是否包含內容。 。 。其他人回答如何通過PARAMS中......

1

您需要調用你的程序,就像這樣

$ java -jar yourApp.jar csvFileName.csv 

或者,如果應用程序是不是JAR包裝,

$ java com.yourco.YourMainClass csvFileName.csv 

之所以會出現ArrayIndexOutOfBoundsException,是因爲傳入主方法的args數組的大小爲零(因此沒有第一個元素)。如果您沒有將任何參數傳遞給程序,就會發生這種情況。

順便說一句,你通常應該防範這種通過檢查傳入參數的數量和打印更加連貫的錯誤信息,如:

public static void main(String[] args) 
{ 
    // Check mandatory argument(s) passed in 
    if (args.length < 1) 
    { 
     System.err.println("Must supply filename of CSV input as first argument!"); 
     System.exit(1); 
    } 

    // rest of method, now you know you args[0] exists... 

} 
相關問題