Cant run my programme from command line

早过忘川 提交于 2020-01-05 05:26:18

问题


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


回答1:


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.




回答2:


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



回答3:


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.




回答4:


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.




回答5:


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




回答6:


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

}


来源:https://stackoverflow.com/questions/1940281/cant-run-my-programme-from-command-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!