【问题标题】:ArrayIndexOutOfBounds Exception on executing linux sh fileArrayIndexOutOfBounds 执行 linux sh 文件时出现异常
【发布时间】:2012-02-29 05:29:50
【问题描述】:

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

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

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

WINDOWS 批处理文件:

@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

请帮忙!

【问题讨论】:

  • 您似乎没有在这里传递任何参数...
  • 发布在 Win 和 Linux 中的使用示例。

标签: java linux shell


【解决方案1】:

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

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

希望对你有帮助

【讨论】:

    【解决方案2】:

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

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

    试试:

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

    【讨论】:

      【解决方案3】:

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

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

      如果您想查看您的 shell 脚本将要运行的实际命令,您可以随时将“echo”放在一行前面,然后查看所有变量扩展为什么。这是调试 shell 脚本的一种简单方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 2022-12-11
        • 2014-06-10
        • 2013-06-19
        • 2010-11-27
        • 1970-01-01
        相关资源
        最近更新 更多