チャックの答えは私にヒントosascript
を与えたので、コマンドラインから直接試してみることにしました。Runtime.exec()
、osascript
、および AppleScriptで動作させることができました。
Java は AppleScript を起動しosascript
、コマンド ラインから次のように使用してアプリケーション名を渡しますRuntime.exec()
。
try {
List<String> shellCommandList = new ArrayList<String>();
shellCommandList.add("osascript");
shellCommandList.add("activateApplication.scpt");
shellCommandList.add(appName);
String[] shellCommand = (String[])shellCommandList.toArray(new String[0]);
Process p = Runtime.getRuntime().exec(shellCommand);
// if desired, pipe out the script's output
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String cmdOutStr = "";
while ((cmdOutStr = in.readLine()) != null) {
System.out.println(cmdOutStr);
}
// if desired, check the script's exit value
int exitValue = p.waitFor();
if (exitValue != 0) {
// TODO: error dialog
System.err.println("Invalid application name: "+ appName);
}
} catch (Exception e) {
e.printStackTrace();
}
また、AppleScript は実行ハンドラーを使用して、着信引数をキャプチャします。
on run (arguments)
set appName to (item 1 of arguments)
tell application appName to activate
return 0
end run