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

调用Java Robot类mousePress方法时程序停止运行如何解决

调用Robot#mousePress方法时程序停止运行问题说明

问题代码

if(read == 2) {
    System.out.println("Click down");
    robot.mousePress(is.read());
}
else if(read == 3) {
    System.out.println("Click up");
    robot.mouseRelease(is.read());
}

变量说明

  • read:数据包ID
  • is:服务端的套接字输入流

问题现象

每次从客户端向服务端发送(数据包ID、鼠标按键)数据时,服务端可正常读取两个参数且无停止问题(已通过打印测试),但添加Robot#mousePress/Robot#mouseRelease调用后程序就无法正常运行。整段代码封装在由ScheduledExecutorService调度的Runnable中,调度间隔为1毫秒。

最小复现代码

import java.awt.*;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

public class Test {

    public static void main(String[] args) throws AWTException {
        Robot robot = new Robot();
        AtomicBoolean bool = new AtomicBoolean();
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
            System.out.println("hey");
            if (!bool.get()) {
                bool.set(true);
                robot.mousePress(1);
            }
        }, 0, 1, TimeUnit.MILLISECONDS);
    }

}
解决方案

Robot类的鼠标操作相关方法接收的参数不是直接的按键数字,而是对应按键的掩码值,不要直接传入数字,需要先通过InputEvent.getMaskForButton(number)方法将数字转换为对应掩码后再传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 00:42:00