Java 8 JAR文件在命令提示符中执行时出现ArrayIndexOutOfBoundsException问题求助
问题分析与解决:JAR运行时
ArrayIndexOutOfBoundsException异常 问题背景
我编写了一个简单的Java程序,从程序参数接收两个整数并打印它们的和。在IntelliJ IDEA中配置参数3和5后运行完全正常,输出a + b = 8,进程以退出码0结束。但打包成JAR(名为FirstProject_jar3)后,用命令-classpath FirstProject.jar org.firstjavaproject.tutorial.TwoSum在命令提示符执行时,收到错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at org.firstjavaproject.tutorial.TwoSum.main(TwoSum.java:5)
相关代码(TwoSum.java):
package org.firstjavaproject.tutorial; public class TwoSum { public static void main(String[] args) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int sum = a + b; System.out.println ("a + b = " + sum); } }
问题原因&解决方案
这个错误的核心原因非常明确:IDE中配置的程序参数只在IDE内部运行时生效,命令行执行JAR时不会自动继承这些参数。
在IDE里设置3和5作为参数时,IDE启动程序会自动把这两个值传入main方法的args数组,所以args[0]和args[1]都有合法值;但你在命令行执行时,只输入了启动类的命令,没有传入任何参数,此时args数组是空的(长度为0),访问args[0]自然会触发数组越界异常。
正确的命令行执行方式
你需要在命令末尾手动添加两个整数参数,格式如下:
java -classpath FirstProject.jar org.firstjavaproject.tutorial.TwoSum 3 5
这里的3和5就是要传入程序的两个整数参数,执行后就能正常输出a + b = 8了。
优化建议:增加参数校验
为了避免后续再遇到类似问题,可以在代码里添加参数长度校验,当用户未传入足够参数时给出明确提示,让程序更健壮:
package org.firstjavaproject.tutorial; public class TwoSum { public static void main(String[] args) { // 先检查参数数量是否符合要求 if (args.length != 2) { System.out.println("错误:请传入两个整数参数!"); System.out.println("示例用法:java -classpath FirstProject.jar org.firstjavaproject.tutorial.TwoSum 3 5"); System.exit(1); // 非0退出码表示异常结束 } int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int sum = a + b; System.out.println ("a + b = " + sum); } }
内容的提问来源于stack exchange,提问作者wpc6707
相关产品推荐
相关产品推荐

