如何在Java桌面应用程序中停止无限循环以移动鼠标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java桌面应用程序中停止无限循环以移动鼠标相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个桌面程序来移动鼠标,直到我按下java中的字母“q”。我创建了一个窗口(JFrame),当我按下按钮时,鼠标开始移动。我的疑问与这部分有关:

while (true) {
        for (int j = 1500; j <1600; j++) {
            robot.mouseMove(j, 0);
            robot.delay(100);
        }
    }

如何通过按字母来阻止这个无限循环?

public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_Q) {
        System.exit(0);
    }
}

为什么这不起作用? (我需要按一个字母,因为鼠标在程序运行时无法使用)提前感谢。

答案

首先,您可能不得不放弃事件处理程序。如果在awt事件队列上运行while(true),那么你正在占用整个GUI,难怪它没有响应;从鼠标事件返回后才能触发其他事件。

你能提供更多代码吗?这还不足以解释这种行为。

您可能需要启动一个线程来执行此工作。

更新:

而不是同步调用JavaRobot();方法,您需要在一个线程中运行它。用于测试的丑陋黑客版本:

(new Thread(() -> JavaRobot())).start();

更干净的版本可能会将线程保存在变量中,因此您可以使用另一个按钮来中断它。如果您不想自己处理线程但仍然在线程中运行任务,那么您也可以使用执行程序服务apis。

以上是关于如何在Java桌面应用程序中停止无限循环以移动鼠标的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中使用 JsonIgnore 来停止无限循环? [复制]

鼠标悬停时无限移动对象

C#当鼠标移动事件时,时间循环停止

如何在 jQuery 中停止 .each .animate 循环函数

Java中如何在windows桌面上添加鼠标监听事件

Java中如何在windows桌面上添加鼠标监听事件