You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AppleScript在Java代码中运行异常:激活Daylite但无法获取焦点

问题分析与解决方案

问题描述

编写的AppleScript在Script Editor中可正常打开Daylite并创建记录,但通过Java代码调用时,仅能激活Daylite应用却无法使其获得焦点,导致后续按键、点击操作全部失效。

核心问题

  1. 权限差异:Script Editor默认已获取系统辅助功能权限,而Java进程通常未被授权控制System Events,无法强制Daylite成为前台应用。
  2. 脚本语法错误:Java拼接的AppleScript存在语法问题(如tell application "Daylite" activate缺少to,多余无效的run script语句),前台激活逻辑不严谨。
  3. 时机控制不足:延迟时间过短,Daylite未完全完成激活流程就执行后续操作。

修正后的AppleScript(Java嵌入版)

tell application "Daylite"
    activate
    delay 2 -- 确保应用完全启动加载
end tell

tell application "System Events"
    -- 强制将Daylite进程设置为前台应用
    set frontmost of application process "Daylite" to true
    delay 0.5 -- 等待前台状态生效
    
    keystroke "o" using {shift down, command down}
    delay 0.1
    key code 49
    key code 123
    repeat 16 times
        key code 51
    end repeat
    delay 0.1
    set the clipboard to "%OPPORTUNITY_NAME%"
    delay 0.1
    keystroke "v" using {command down}
    delay 0.5
    key code 76
    repeat 13 times
        key code 48
        delay 0.2
    end repeat
    delay 0.5
    key code 76
    delay 0.1
    set the clipboard to "%CONTACT_NAME%"
    delay 0.1
    keystroke "v" using {command down}
    delay 0.1
    key code 76
    delay 0.1
    click button "Save" of window "New Opportunity" of application process "Daylite"
end tell

修正后的Java代码

public void CreateDayliteOpportunity() {
    Runtime runtime = Runtime.getRuntime();
    // 拼接脚本并替换占位符为实际变量
    String applescript = "tell application \"Daylite\"\n" +
                        "    activate\n" +
                        "    delay 2\n" +
                        "end tell\n" +
                        "tell application \"System Events\"\n" +
                        "    set frontmost of application process \"Daylite\" to true\n" +
                        "    delay 0.5\n" +
                        "    keystroke \"o\" using {shift down, command down}\n" +
                        "    delay 0.1\n" +
                        "    key code 49\n" +
                        "    key code 123\n" +
                        "    repeat 16 times\n" +
                        "        key code 51\n" +
                        "    end repeat\n" +
                        "    delay 0.1\n" +
                        "    set the clipboard to \"" + OpportunityName + "\"\n" +
                        "    delay 0.1\n" +
                        "    keystroke \"v\" using {command down}\n" +
                        "    delay 0.5\n" +
                        "    key code 76\n" +
                        "    repeat 13 times\n" +
                        "        key code 48\n" +
                        "        delay 0.2\n" +
                        "    end repeat\n" +
                        "    delay 0.5\n" +
                        "    key code 76\n" +
                        "    delay 0.1\n" +
                        "    set the clipboard to \"" + ContactName + "\"\n" +
                        "    delay 0.1\n" +
                        "    keystroke \"v\" using {command down}\n" +
                        "    delay 0.1\n" +
                        "    key code 76\n" +
                        "    delay 0.1\n" +
                        "    click button \"Save\" of window \"New Opportunity\" of application process \"Daylite\"\n" +
                        "end tell";

    String[] args = { "osascript", "-e", applescript };
    try {
        Process process = runtime.exec(args);
        // 等待脚本执行完成,可根据需求处理输出
        process.waitFor();
    } catch(IOException | InterruptedException e) {
        JOptionPane.showMessageDialog(null, "ERROR! " + e.getMessage());
    }
}

必要配置操作

  1. 授予辅助功能权限:

    • 打开「系统设置」→「隐私与安全性」→「辅助功能」
    • 找到运行Java程序的进程(如IDE、你的Java应用包),勾选权限
    • 若找不到目标进程,点击「+」手动添加应用
  2. 优化延迟逻辑:

    • 根据系统性能调整delay数值,确保每个操作完成后再执行下一步
    • 可添加窗口存在判断(如repeat until window "New Opportunity" exists)替代固定延迟,提升稳定性

内容的提问来源于stack exchange,提问作者Gareth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:02:47