1

I have a main method that creates an instance of a logic class

 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);
        }
    }

the thing is that the programme requires a csv file to run, i have put it in the same directory as the .jar file but when i run from the command line i just get java.lang.arrayindexoutofbounds(0) error

what am i doing wrong

thanks

Georg Fritzsche
  • 97,545
  • 26
  • 194
  • 236
tommy
  • 383
  • 3
  • 5
  • 12
  • If your program requires an external file you'll need to be at least trying to access that somewhere in your code. If you posted that people would be better able to help you. – Steve B. Dec 21 '09 at 14:07

6 Answers6

7

Your command line should look like:

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

It looks like you're not supplying the .csv file name (which will go in args[0]) ?

The above assumes that the main class is not defined in your .jar manifest. if it is, then use:

java -jar {name_of_jar} {name_of_csv}

It's a good practise to check the args[] array for the required info, btw, and generate a message such as "Missing .csv file name" or similar to avoid a nasty exception/stack trace.

Brian Agnew
  • 268,207
  • 37
  • 334
  • 440
1

You need to pass an argument to your program. new Logic(argv[0]) indicates that the program expects at least one command line argument, like so:

java -jar ... somearg
JesperE
  • 63,317
  • 21
  • 138
  • 197
1

You need to call your application with a command line something like:

java -jar MyAppJar myFile.csv

. You got that error message because you weren't supplying the file name.

Carl Smotricz
  • 66,391
  • 18
  • 125
  • 167
1

args[0] will not contain anything unless you put it on the command line and you'll get an index out of bounds error. Your command should look like this...

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

args[0] will then contain c:\myfile.csv and you don't need to worry about its location.

Simon
  • 78,655
  • 25
  • 88
  • 118
1

You're not checking if the args have any items. Always check if args has contents before you try to access it. . . Others have answered how to pass the params in...

Jason D
  • 2,303
  • 14
  • 24
1

You need to invoke your program as something like

$ java -jar yourApp.jar csvFileName.csv

or, if the application isn't JAR-packaged,

$ java com.yourco.YourMainClass csvFileName.csv

The reason why you're getting the ArrayIndexOutOfBoundsException, is because the args array passed into the main method is of size zero (so doesn't have a first element). This happens if you don't pass any parameters to the program.

Incidentally you should typically guard against this by checking the number of arguments passed in and printing a more coherent error message, such as:

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

}
Andrzej Doyle
  • 102,507
  • 33
  • 189
  • 228