Robot.keypress использует поток: иногда не фокусируется на правом окне - PullRequest
0 голосов
/ 05 июля 2018

Я использую экземпляр Robot для программного нажатия клавиш. Эти клавиши нажимаются внутри цикла while с использованием класса, расширяющего Thread.

Мое приложение имеет только одно окно, главное окно.

Даже если я запрашиваю фокус на правильном окне каждый раз, когда нажимаю на кнопку, запускающую поток, бывает, что иногда события нажатия клавиш запускаются в другом месте вместо моего приложения.

Почему это происходит?

Вот фрагмент:

try {
            Robot robot = new Robot(); 

            while(!stopped)
            {
               fireRandomKey(robot);
               Thread.sleep(1000);
            }

    } catch (AWTException e) { 
        e.printStackTrace(); 
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

1 Ответ

0 голосов
/ 05 июля 2018

Если ваша цель - имитировать взаимодействие с пользователем, вы ДОЛЖНЫ использовать Robot для имитации событий пользовательской мыши (например, щелчка в JTextField) перед отправкой ключевых событий.

Таким образом, вы будете защищены от внешних воздействий, которые могут привлечь ваше внимание (уведомления на рабочем столе, другие приложения и т. Д ...)

...