开机自启Java程序时CLI参数被忽略,触发ArrayIndexOutBoundsException
问题原因及解决办法
start命令的语法陷阱:Windows的
start命令会把第一个带引号的参数当作控制台窗口的标题,而非命令的参数。你的脚本里"Program.jar"是第一个带引号的内容,开机启动时start会把它解析成窗口标题,导致实际传给javaw的参数变成-jar "some default arg"——这种情况下javaw找不到对应jar文件,或者即便通过异常分支启动了程序,参数也根本没传进去,自然触发ArrayIndexOutBoundsException。而手动双击时,cmd的解析逻辑相对宽松,没触发这个问题。工作目录差异:手动双击脚本时,cmd的工作目录是脚本所在文件夹,
javaw能正确找到相对路径下的Program.jar;但开机启动时,脚本的工作目录默认是C:\Windows\System32,如果Program.jar不在这个目录里,javaw会找不到jar文件,进而导致参数传递失效。
解决办法
修正
start命令的写法,添加空的窗口标题参数:start "" javaw -jar "Program.jar" "some default arg"将
Program.jar改为绝对路径,彻底避免工作目录带来的问题:start "" javaw -jar "C:\你的程序存放路径\Program.jar" "some default arg"
内容的提问来源于stack exchange,提问作者user14647130
相关产品推荐
相关产品推荐

