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



macOS升级到Mojave后,使用java Robot的java应用程序在High Sierra下运行得非常好,这导致了工作不正确。症状为:

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

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

  • 如果我通过Java命令行运行robot.mouseMove,它就可以正常工作,如果我在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在Mac OS X中根本不起作用我已经在Security&"隐私",单击顶部的"隐私"选项卡,然后选择"辅助功能"。它并没有解决问题。此外,我看不出有什么不同。

我浏览了这个链接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仍然显示"这是不允许的。请在主线程中调用TIS/TSM!!",但键盘和鼠标事件都可以工作。我也检查了你的代码。

最新更新