2009-12-21 3 views
1

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

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

Если программа требует внешнего файла вам необходимо быть в наименьшей степени пытается получить доступ к этому где-то в вашем коде. Если вы опубликуете, что люди смогут лучше вам помочь. –

ответ

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 

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

1

Вы не проверяете, есть ли у args какие-либо предметы. Всегда проверяйте, есть ли у args содержимое, прежде чем пытаться получить к нему доступ. , , Другие ответили, как пройти 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... 

} 
Смежные вопросы