Слушатели совместно с классом роботов - PullRequest
2 голосов
/ 06 октября 2011

Я недавно играл с классом Robot, и он делает то, что я хочу, но я не понял, как прервать / остановить его действия с помощью пользовательского ввода.

Например: я хочу, чтобы он щелкнул по рабочему столу сто раз, но я решаю сорок щелчков, чтобы выйти или приостановить его.

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

Ответы [ 2 ]

4 голосов
/ 06 октября 2011

Как сказал Эдвард, похоже, нет способа сделать именно то, что я искал. Таким образом, этот ответ должен объяснить, как я достиг приемлемой замены.

Другой вопрос, на который ссылался Эдвард, гласил, что

MouseInfo.getPointerInfo().getLocation()

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

Чтобы достичь этого результата, я сравнил координаты мыши по осям x и y с координатами x и y, которые последний раз устанавливал робот. Если два не совпадают, программа завершается.

Приостановка программы с помощью этого метода была бы непрактичной, поскольку возобновление потребовало бы возврата к исходным координатам x и y до приостановки, но это, по крайней мере, дает пример того, как добиться остановки без фактического сосредоточения на родительском элементе java. программа.

Чтобы приостановить программу, вместо этого вы должны сравнить координаты с диапазоном координат (пусть координаты создают воображаемый 2D-блок). Если координаты мыши находятся в этом диапазоне: пауза. Для возобновления выполните противоположную проверку (мышь не находится в этом диапазоне).

1 голос
/ 06 октября 2011

Вы можете использовать часть кода из этого ответа: Имитация клавиши, удерживаемой в Java

А затем добавьте Listener к любому действию, компоненту, к какому-либо вызывающему методу stop команды робота.

Это дает вам вдохновение?


Edit После дальнейшего обсуждения реальный вопрос:

Как реагировать на внешние события мыши (вне приложения Java) внутри приложения Java?

Кажется, что вы не можете обойтись без нативного кода и мышиных хуков, так как это зависит от ОС.

Для дальнейшего обсуждения см. Можно ли заставить MouseMotionListener прослушивать все системные события движения мыши?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...