java.awt.Robot 在 macOS Mojave 下运行异常

标签 java awtrobot macos-mojave

在 macOS 升级到 Mojave 后,使用 Java Robot 并在 High Sierra 下运行绝对正常的 java 应用程序,可能无法正常运行。 症状是:

  • robot.keyPress(VK_N);导致大约 7 个相同的错误并且没有输入任何内容。

    2019-02-03 19:27:52.324 java[928:31672] pid(928)/euid(501) 在非主线程环境中调用 TIS/TSM,错误:这是不允许的.请在主线程中调用 TIS/TSM!!!

  • robot.mouseMove 如果我通过 Java 命令行运行它,它工作正常,如果我在 Eclipse 中运行相同的类,则它不起作用。

    public static void main( String[] arg) throws AWTException, InterruptedException {
       Robot robot;
       robot = new Robot();
    
        robot.waitForIdle();
        robot.keyPress(VK_N);
        robot.keyRelease(VK_N);
    
        robot.waitForIdle();
        robot.mouseMove(100, 100);
        Thread.sleep(500);
        robot.mouseMove(10, 10);
    }    
    

根据推荐Robot.mouseMove does not work at all in Mac OS X 我已将 Java 和 Eclipse 添加到 Security & Privacy 中,单击顶部的 Privacy 选项卡,然后选择 Accessibility。它没有解决问题。而且,我看不出有什么区别。

我浏览了这个链接 https://eclecticlight.co/2018/09/17/managing-mojaves-privacy-protection-privacy-controls/ 并运行“tccutil reset AppleEvents”。但是我没有想到将这对应用程序添加到“系统偏好设置”的“隐私”=>“自动化”部分的对话框

我的 Java 是 1.8.0_191,x86_64。

有什么想法可以让该代码在 Mac OS Mojave 中运行吗?

最好的问候,

最佳答案

不确定您是否已经找到解决方案。如果没有,请按照以下步骤操作,

  1. 设置 -> 安全和隐私
  2. 向下滚动到“辅助功能”
  3. 点击底部的锁定按钮并解锁安全和隐私偏好
  4. 单击“+”图标和您的程序(在我的示例中为 Eclipse IDE)并尝试再次运行

IDE 仍然显示“This is NOT allowed. Please call TIS/TSM in main thread!!!”但键盘和鼠标事件都有效。我也检查了你的代码。

关于java.awt.Robot 在 macOS Mojave 下运行异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54511742/

相关文章:

java - 使用正则表达式删除电子邮件地址后的尾随字符

java - 如何用字符更改按钮文本?

java - 如何将 SparkContext 连接到 yarn 上的 CDH 6

java - 在 java 中制作 "Fake"鼠标?

xcode - 在 Mojave 10.14.1 完整版中上传到 App Store Connect 时出错

swift - 无法在 Xcode 10 中使用源代码编辑器扩展

java - 等待 selenium webdriver 直到加载完成

Java机器人与图像对比

java - 在测试期间模拟鼠标点击。 JUnit,JavaFX

java - 为什么sdkmanager不会更新?