2010-07-14 4 views
6

sto ricevendo questo errore quando si tenta di eseguire AppleScript dalla mia applicazione Java Il codice è il seguente:Java - Si presume “"”ma ha trovato sconosciuto gettone

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); 

ottengo il seguente errore:

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) 

Grazie per la vostra considerazione

+1

Potrebbe essere possibile che uno di quelli "" 'sia in realtà un carattere speciale che sembra proprio un semplice preventivo? –

+0

Non penso, ho passato e mi sono assicurato che tutti fossero semplici " – Jakir00

risposta

7

Un'ipotesi basata sull'esperienza ... Forse lo spazio di escape nel pathname è il tuo stopper.

tenta di chiamare uno script da una posizione in cui il percorso non ha spazi o cercare di 'double-escape' lo spazio sfuggito, in questo modo:

"tell application \"Terminal\" to do shell script \"/System/Library/CoreServices/Menu\\\\ Extras/user.menu/Contents/Resources/CGSession -suspend\" " 

Un motivo comune per strani errori sono quegli spazi bianchi nei nomi dei percorsi. Quindi è stata la mia prima ipotesi, che questo crea problemi nella sceneggiatura. Poi mi sono ricordato che a volte dobbiamo "scappare dalle barre rovesciate". This article non spiega perché ha risolto esattamente il tuo problema, ma mostra quanti backslash possono essere necessari ...

6

Hai bisogno di 'double-escape' lo spazio nel percorso:.

 vvvv 
...\Menu\\\\ Extras\... 
+0

... ha avuto la stessa idea allo stesso tempo. –