我有一个创建逻辑类的一个实例的主方法
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)错误
我究竟做错了什么
谢谢
你的命令行应该是这样的:
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文件名”或类似避免讨厌的例外/堆栈跟踪。
你需要一个参数传递给你的程序。 new Logic(argv[0])
表示程序预计的至少一个命令行参数,如下所示:
java -jar ... somearg
你需要使用命令行像打电话给你的应用程序:
java -jar MyAppJar myFile.csv
。 因为你没有提供的文件名,你得到了错误信息。
ARGS [0],除非你把它在命令行中不会包含任何东西,你会得到一个索引出界失误。 你的命令应该是这样的......
java -jar myjar.jar c:\myfile.csv
ARGS [0]将包含随后C:\ myfile.csv,你不必担心它的位置。
你不检查,如果ARGS有任何物品。 经常检查是否有ARGS内容您尝试访问它。 。 。 其他人回答如何通过PARAMS中...
您需要调用你的程序,就像这样
$ 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...
}