ArrayIndexOutOfBounds执行linux sh文件时的异常

时间:2012-02-29 05:29:50

标签: java linux shell

我在java中有一个程序,它将第0个参数作为文件位置,如

File f = new File(args[0]);

所以当我使用Windows批处理(.bat)文件执行它时,它可以正常工作。 但是当我在linux中使用linux shell文件(.sh)执行相同的操作时,我得到了ArrayIndexOutOfBoundsException。

WINDOWS BATCH FILE:

@echo off
for /f %%i in ("%0") do set scriptpath=%%~dpi
set cp=%scriptpath%/../lib/*.jar;
java -classpath %cp% com.synchronizer.main.MYSynchronizer %scriptpath% "%1" "%2"

LINUX SH文件:

export JAVA_HOME=/usr/local/java
PATH=/usr/local/java/bin:${PATH}

THE_CLASSPATH=
for i in `ls ../lib/*.jar`
do
  THE_CLASSPATH=${THE_CLASSPATH}:${i}
done

java -cp ".:${THE_CLASSPATH}"  \
com.synchronizer.main.MYSynchronizer

请帮忙!

3 个答案:

答案 0 :(得分:0)

它看起来像是脚本中的问题(没有参数传递给Java程序)。

您可以考虑像这样调试脚本:debugging scripts

希望这有帮助

答案 1 :(得分:0)

您的shell脚本未传递任何参数:

java -cp ".:${THE_CLASSPATH}" com.synchronizer.main.MYSynchronizer

尝试:

java -cp ".:${THE_CLASSPATH}" com.synchronizer.main.MYSynchronizer "$1" "$2"

答案 2 :(得分:0)

如上所述,您的Linux shell脚本不会向您尝试启动的Java程序发送任何参数。

而且,除此之外,您没有向我们展示如何运行Linux shell脚本。如果在启动shell脚本时没有在命令行上给出参数,则不能从shell脚本向Java应用程序传递任何参数。

如果要查看将由shell脚本运行的实际命令,可以始终将“echo”放在一行前面,并查看所有变量的扩展名。这是调试shell脚本的简单方法。

相关问题