首页 > 解决方案 > 引发 Java 错误时停止运行 .jar 的 AppleScript

问题描述

我有一个用于运行 .jar 文件的 AppleScript。.jar 文件采用最初通过命令行输入的几个输入,但现在我输入 .csv 并自动读入 .jar。由于未知原因,有时无法正确读取 CSV 中的数字,从而导致NumberFormatExceptionJava 代码中出现 a。但是,我的脚本没有中断,而是不断尝试在无限循环中输入无效输入。有没有办法修改我的代码,以便当 .jar 引发错误时,脚本会停止?

这是我当前的代码:

on RunFile(jar_location)
    do shell script "cd " & jar_location & " ; cat 'prompt.csv' | sh 'runScript.sh' 'WSO'"
end RunFile

标签: javaapplescript

解决方案


在评论中讨论了这一点之后,很明显问题在于 .jar 文件试图进行交互——在光标处要求一些输入——而 AppleScript 的do shell script设计并不是为此而设计的。AppleScript 可以从 shell 获取错误和输出,但它不能将响应反馈给 shell,或者判断 shell 脚本是否正在等待输入。

如果 .jar 文件无法在非交互模式下运行,那么 AppleScript 确保进程结束的唯一方法是获取其进程 ID 号,等待一段合理的时间,然后向其发送终止信号。该脚本如下所示:

on RunFile(jar_location)
    set pid to do shell script "cd " & jar_location & " ; cat 'prompt.csv' | sh 'runScript.sh' 'WSO' &> /dev/null & echo $!"
    -- wait 5 seconds, or whatever seems appropriate for the task to complete
    delay 5
    try
        do shell script "kill " & pid
    end try
end RunFile

附加的&> /dev/null & echo $!短语分离了 shell 脚本,允许 AppleScript 向前移动,并返回进程的进程 ID 以供以后使用。我已将 kill 信号放在 try 块中,以便在进程已正常退出时脚本不会抛出错误。


推荐阅读