java - 使用 AWTEventListener 的 Java Break while 循环
问题描述
我正在尝试使用 AWTEventListener 中断循环,但是在检查我是否按下 ctrl+p 后,在“if”中它说中断时出错;
try {
Robot robot = new Robot();
int z = 0;
while(true) {
robot.mouseMove(x + z, y);
z++;
AWTEventListener listener = new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
try {
KeyEvent evt = (KeyEvent)event;
if(evt.getID() == KeyEvent.KEY_PRESSED && evt.getModifiers() == KeyEvent.CTRL_MASK && evt.getKeyCode() == KeyEvent.VK_P) {
break; //ERROR
}
}
catch(Exception e) {
e.printStackTrace();
}
}
};
Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);
}
} catch (AWTException e) {
}
解决方案
我认为您在创建侦听器时不了解自己在做什么。您基本上是在原地创建一个类,并且该类有一个名为 eventDispatched() 的方法。eventDispatched() 内部没有循环,所以没有循环可以跳出。
此外,假设事件是 KeyEvent 可能是错误的。这是一个旁注。
您的听众可能需要设置一些您的 while 循环正在查看的字段。而不是 while(true) 您需要执行“while(我的侦听器尚未将某些标志设置为另一个值)”。
推荐阅读
- python - Anaconda:ImportError:无法从“PIL”(matplotlib.pyplot)导入名称“_imaging”
- javascript - 从分配给映射对象键的数组中提取数组元素
- spring-boot - ThymeleafView:java.lang.IllegalArgumentException:需要属性“区域设置”
- excel - 如何用公式定义数字数组
- python - 无法更改一列中的分类数据(熊猫、机器学习)
- spring-boot - 如何正确模块化应用程序配置,以便测试(IT、datajpa、...)不会获取所有用于生产的内容
- r - 有没有办法在 R(或 ml3)的 recipes 包中对行(尤其是虚拟变量)进行分组
- powerbi - DAX 中的 IF 条件是在行上创建笛卡尔连接
- windows - 在 AD 中将组从一个用户复制到另一个用户,但一个特定组除外
- java - 如何从我的 Application 类中找出 onActivityResult 的结果?