首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用Robot#mousePress时,我的程序会停止

当使用Robot#mousePress时,我的程序会停止
EN

Stack Overflow用户
提问于 2021-07-12 21:21:02
回答 1查看 61关注 0票数 0

正如您可能从标题中看到的,当我调用Robot#mousePress我的程序停止时,我的代码如下所示:

代码语言:javascript
复制
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”是套接字输入流(服务器端)

现在,每当我将数据从客户机发送到服务器( PacketID,MouseButton)时,服务器就会正确地读取PacketID和MouseButton,而不会停止运行(通过打印进行测试),但是当我尝试添加机器人#mousePress/机器人#mouseRelease时,它就停止工作了,整个代码都在一个可运行的计划中,该计划使用的是每毫秒运行一次的ScheduledExecutorService。

示例代码:

代码语言:javascript
复制
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(数字)

感谢所有帮助我的人

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-13 09:29:49

您正在传递mousePress一个非法参数,因此它正在抛出一个异常。异常不会从抛出的线程中传播,因此只有在get()返回的ScheduledFuture上调用scheduleAtFixedRate时,才会看到异常。

例外是:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68354004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档