Java 使用 AWTEventListener 中断 while 循环
Java Break while loop using AWTEventListener
我正在尝试使用 AWTEventListener 中断循环,但在 'if' 检查我是否按下 ctrl+p 后它说中断时出错;
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) {
}
我认为您在创建侦听器时不了解自己在做什么。您基本上是在就地创建一个 class,并且 class 有一个名为 eventDispatched() 的方法。 eventDispatched() 内部没有循环,所以没有循环可以跳出。
此外,假设该事件是 KeyEvent 可能是错误的。这是旁注。
您的侦听器可能需要设置您的 while 循环正在查看的一些字段。而不是 while(true) 你需要做“while(my listener hasn't set some flag to another value)”。
我正在尝试使用 AWTEventListener 中断循环,但在 'if' 检查我是否按下 ctrl+p 后它说中断时出错;
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) {
}
我认为您在创建侦听器时不了解自己在做什么。您基本上是在就地创建一个 class,并且 class 有一个名为 eventDispatched() 的方法。 eventDispatched() 内部没有循环,所以没有循环可以跳出。
此外,假设该事件是 KeyEvent 可能是错误的。这是旁注。
您的侦听器可能需要设置您的 while 循环正在查看的一些字段。而不是 while(true) 你需要做“while(my listener hasn't set some flag to another value)”。