调用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:数据包IDis:服务端的套接字输入流
问题现象
每次从客户端向服务端发送(数据包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
相关产品推荐
相关产品推荐

