Не могу запустить мою программу из командной строки - PullRequest
1 голос
/ 21 декабря 2009

У меня есть метод main, который создает экземпляр логического класса

 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)

что я делаю не так

спасибо

Ответы [ 6 ]

7 голосов
/ 21 декабря 2009

Ваша командная строка должна выглядеть так:

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 голос
/ 21 декабря 2009

Вам нужно вызвать вашу программу как что-то вроде

$ java -jar yourApp.jar csvFileName.csv

или, если приложение не упаковано в JAR,

$ java com.yourco.YourMainClass csvFileName.csv

Причина, по которой вы получаете исключение ArrayIndexOutOfBoundsException, заключается в том, что массив args, передаваемый в метод main, имеет нулевой размер (поэтому не имеет первого элемента). Это происходит, если вы не передаете в программу никаких параметров.

Между прочим, вы, как правило, должны защититься от этого, проверив количество переданных аргументов и напечатав более связное сообщение об ошибке, например:

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...

}
1 голос
/ 21 декабря 2009

Вы не проверяете, есть ли в аргах какие-либо предметы. Всегда проверяйте, есть ли в args содержимое, прежде чем пытаться получить к нему доступ. , , Другие ответили, как передать параметры в ...

1 голос
/ 21 декабря 2009

args [0] не будет содержать ничего, если вы не введете это в командную строку и не получите ошибку индексации за пределами границ. Ваша команда должна выглядеть следующим образом ...

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

args [0] будет содержать c: \ myfile.csv, и вам не нужно беспокоиться о его расположении.

1 голос
/ 21 декабря 2009

Вам нужно вызвать приложение из командной строки примерно так:

java -jar MyAppJar myFile.csv

. Вы получили это сообщение об ошибке, потому что вы не указали имя файла.

1 голос
/ 21 декабря 2009

Вам нужно передать аргумент вашей программе. new Logic(argv[0]) указывает, что программа ожидает хотя бы один аргумент командной строки, например:

java -jar ... somearg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...