在 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 中运行吗?
最好的问候,
最佳答案
不确定您是否已经找到解决方案。如果没有,请按照以下步骤操作,
- 设置 -> 安全和隐私
- 向下滚动到“辅助功能”
- 点击底部的锁定按钮并解锁安全和隐私偏好
- 单击“+”图标和您的程序(在我的示例中为 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/