如何在 java 桌面应用程序中停止无限循环以移动鼠标
How to stop an infinit loop in java desktop application to move the mouse
我正在尝试创建一个桌面程序来移动鼠标,直到我按下 java 中的字母 "q"。
我创建了一个 window (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);
}
}
为什么这不起作用?
(我需要按一个字母,因为鼠标在程序运行时无法使用)
提前致谢。
首先,您可能不得不放弃事件处理程序。
如果 while(true) 在 awt 事件队列中是 运行,那么您正在占用整个 GUI,难怪它没有响应;在您从鼠标事件 return 之前,不会触发其他事件。
你能给更多的代码吗?这不足以解释这种行为。
您可能需要启动一个线程来执行这项工作。
更新:
而不是同步调用您的 JavaRobot();方法,您将需要在线程中 运行 它。用于测试的丑陋的黑客版本:
(new Thread(() -> JavaRobot())).start();
更简洁的版本可能会将线程保存在一个变量中,这样您就可以使用另一个按钮中断它。如果您不想自己处理线程,但仍然 运行 线程中的任务,您也可以使用执行程序服务 api。
我正在尝试创建一个桌面程序来移动鼠标,直到我按下 java 中的字母 "q"。 我创建了一个 window (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);
}
}
为什么这不起作用? (我需要按一个字母,因为鼠标在程序运行时无法使用) 提前致谢。
首先,您可能不得不放弃事件处理程序。 如果 while(true) 在 awt 事件队列中是 运行,那么您正在占用整个 GUI,难怪它没有响应;在您从鼠标事件 return 之前,不会触发其他事件。
你能给更多的代码吗?这不足以解释这种行为。
您可能需要启动一个线程来执行这项工作。
更新:
而不是同步调用您的 JavaRobot();方法,您将需要在线程中 运行 它。用于测试的丑陋的黑客版本:
(new Thread(() -> JavaRobot())).start();
更简洁的版本可能会将线程保存在一个变量中,这样您就可以使用另一个按钮中断它。如果您不想自己处理线程,但仍然 运行 线程中的任务,您也可以使用执行程序服务 api。