使用AWTEventListener的Java中断while循环

使用AWTEventListener的Java中断while循环,java,while-loop,keylistener,Java,While Loop,Keylistener,我试图使用AWTEventListener来中断循环,但在“if”中,在检查是否按下ctrl+p后,它会在中断时显示error try { Robot robot = new Robot(); int z = 0; while(true) { robot.mouseMove(x + z, y); z++; AWTEventListener listener =

我试图使用AWTEventListener来中断循环,但在“if”中,在检查是否按下ctrl+p后,它会在中断时显示error

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(我的侦听器没有将某些标志设置为另一个值)”,而不是while(true)