正如您可能从标题中看到的,当我调用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());
}其中:
现在,每当我将数据从客户机发送到服务器( PacketID,MouseButton)时,服务器就会正确地读取PacketID和MouseButton,而不会停止运行(通过打印进行测试),但是当我尝试添加机器人#mousePress/机器人#mouseRelease时,它就停止工作了,整个代码都在一个可运行的计划中,该计划使用的是每毫秒运行一次的ScheduledExecutorService。
示例代码:
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);
}
}编辑:
与其将直接数字传递给机器人方法,不如将数字槽InputEvent.getMaskForButton(数字)
感谢所有帮助我的人
发布于 2021-07-13 09:29:49
您正在传递mousePress一个非法参数,因此它正在抛出一个异常。异常不会从抛出的线程中传播,因此只有在get()返回的ScheduledFuture上调用scheduleAtFixedRate时,才会看到异常。
例外是:
Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.IllegalArgumentException: Invalid combination of button flags
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:195)
at Test.main(Test.java:26)
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Invalid combination of button flags
at Test.lambda$main$0(Test.java:22)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:654)
at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:336)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:1521)
Caused by: java.lang.IllegalArgumentException: Invalid combination of button flags
at java.desktop/java.awt.Robot.checkButtonsArgument(Robot.java:316)
at java.desktop/java.awt.Robot.mousePress(Robot.java:252)
at Test.lambda$main$0(Test.java:18)https://stackoverflow.com/questions/68354004
复制相似问题