Java - 期待"""但发现了未知的令牌

Jak*_*r00 6 java applescript

我尝试从我的java应用程序执行applescript时收到此错误.代码如下:

String script = "tell application \"Terminal\" to do shell script \"/System/Library/CoreServices/Menu\\ Extras/user.menu/Contents/Resources/CGSession -suspend\" ";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("AppleScript");
engine.eval(script);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Exception in thread "main" javax.script.ScriptException: Expected “"” but found unknown token.
    at apple.applescript.AppleScriptEngine.evalScript(Native Method)
    at apple.applescript.AppleScriptEngine.eval(AppleScriptEngine.java:342)
    at apple.applescript.AppleScriptEngine.eval(AppleScriptEngine.java:313)
    at myTestApp.Main.main(Main.java:25)
Run Code Online (Sandbox Code Playgroud)

谢谢你的考虑.

And*_*s_D 9

基于经验的猜测...也许路径名中的转义空间是你的节目限制.

尝试从路径没有空格的位置调用脚本或尝试"转义"转义空间,如下所示:

"tell application \"Terminal\" to do shell script \"/System/Library/CoreServices/Menu\\\\ Extras/user.menu/Contents/Resources/CGSession -suspend\" "
Run Code Online (Sandbox Code Playgroud)

奇怪错误的一个常见原因是路径名中的空格.所以这是我的第一个猜测,这会导致脚本出现问题.然后我记得有时候我们必须"逃脱逃脱的反斜杠".这篇文章没有解释,为什么它解决了你的问题,但它显示了可能需要多少反斜杠......


mar*_*ton 7

你需要"双重逃避"路径中的空间:

        vvvv
...\Menu\\\\ Extras\...
Run Code Online (Sandbox Code Playgroud)