Java Break, а l oop с помощью AWTEventListener - PullRequest
0 голосов
/ 08 июля 2020

Я пытаюсь сломать l oop с помощью 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) {
        
    }

1 Ответ

0 голосов
/ 08 июля 2020

Не думаю, что вы понимаете, что делаете при создании слушателей. По сути, вы создаете класс прямо на месте, и у этого класса есть метод с именем eventDispatched (). Внутри eventDispatched () нет l oop, поэтому нет l oop, из которого можно было бы выйти.

Более того, вероятно, ошибочно было бы предполагать, что событие является KeyEvent. Это примечание.

Вашему слушателю, вероятно, нужно установить какое-то поле, на которое смотрит ваш while l oop. Вместо while (true) вам нужно сделать «while (мой слушатель не установил какой-либо флаг на другое значение)».

...