繁体   English   中英

Java 使用 AWTEventListener 中断 while 循环

[英]Java Break while loop using AWTEventListener

我正在尝试使用 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) {
        
    }

我认为您在创建侦听器时不了解自己在做什么。 您基本上是在原地创建一个 class,并且该 class 有一个名为 eventDispatched() 的方法。 eventDispatched() 内部没有循环,所以没有循环可以跳出。

此外,假设事件是 KeyEvent 可能是错误的。 这是一个旁注。

您的听众可能需要设置一些您的 while 循环正在查看的字段。 而不是 while(true) 您需要执行“while(我的侦听器尚未将某些标志设置为另一个值)”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM