无法从命令行运行我的程序

时间:2009-12-21 14:03:57

标签: java command-line jar

我有一个创建逻辑类实例的主方法

 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)错误< / p>

我做错了什么

感谢

6 个答案:

答案 0 :(得分: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[]数组中的所需信息,顺便说一句,并生成一条消息,例如“Missing .csv file name”或类似信息以避免令人讨厌的异常/ stack trace。

答案 1 :(得分:1)

您需要将参数传递给您的程序。 new Logic(argv[0])表示程序至少需要一个命令行参数,如下所示:

java -jar ... somearg

答案 2 :(得分:1)

您需要使用以下命令行调用您的应用程序:

java -jar MyAppJar myFile.csv

。您收到了该错误消息,因为您没有提供文件名。

答案 3 :(得分:1)

args [0]将不包含任何内容,除非您将它放在命令行上,并且您将获得索引超出范围的错误。你的命令应该是这样的......

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

args [0]将包含c:\ myfile.csv,您无需担心其位置。

答案 4 :(得分:1)

你没有检查args是否有任何物品。在尝试访问args之前,请务必检查args是否包含内容。 。 。其他人已经回答了如何通过... ...

答案 5 :(得分:1)

您需要像

那样调用您的程序
$ java -jar yourApp.jar csvFileName.csv

或者,如果应用程序不是JAR打包的,

$ java com.yourco.YourMainClass csvFileName.csv

你得到ArrayIndexOutOfBoundsException的原因是因为传递给main方法的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...

}