我为自己开了一个疯子。 我正在尝试在调用我编写的Java程序时从命令行中获取参数的数量,在Eclipse中我获得了正确的输出但是在win cmd中我得到了ArrayIndexOutOfBoundException。 然后,我再次使用try-catch,它在eclipse中工作,但在win cmd中没有...我错过了什么?
如果我插入所有参数,它从两端完美地工作,那就是当我想得到它不起作用的缺失参数时。
在我使用的代码的简化版本下面:
public static PrintWriter outWrite;
public static String[] allInput;
public static void main(String [] args) {
// I first tried this
if(args.length==0){
System.out.println("Missing arguments. Please try again");
System.exit(0);
}
if (args.length==1){
System.out.println("Missing second argument. Please try again");
System.exit(0);
}
// and then the try-catch, I leave both of them here so you can see them
try{
myMethod(args[0]);
String input2 = args[1];
// here I'm just saving the output of myMethod to the input2
try {
outWrite = new PrintWriter(input2, "UTF-8");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("Missing arguments. Please try again");
System.exit(0);
}
}
我也看了Eclipse gives different output than cmd using runtime exec但没有成功
---编辑添加命令行并使用精确错误:----
win中使用的命令行是java Driver
,它应该给我在代码中写的消息
相反,它给了我以下内容:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at myPackage.Driver.main(Driver.java:31)
错误中的 line 31
对应于上述代码段中main()
方法内的第一行。
在日食中(Driver.java:31)
有另一个数字正确指向myMethod(args[0])
行
正确的命令行是java myPackage.Driver fileIn.txt fileOut.txt
,它可以从win cmd和eclipse中完美地运行
任何帮助都会很棒! 谢谢:))
答案 0 :(得分:0)
错误是因为Eclipse需要在win或Mac中使用javac
编译.java文件。
我无法在胜利中使用javac
,因为它给了我javac is not recognized error
(我刚刚更改了PC),在查看帖子javac is not recognized as an internal or external command, operable program or batch file后,我能够编译它使用:
javac *.java
文件夹中的src
从那里我终于能够通过正确的错误处理消息从双方(cmd和eclipse)获得正确的输出
我承认我并不完全确定为什么我从cmd获得正确的输出,只要我使用了两个参数,但上面的解决方案对我有效。