2011-10-05 5 views
2

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

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

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

ответ

1

Вы можете быть в состоянии использовать часть кода из этого ответа: Simulate a key held down in Java

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

Есть ли у вас какое-то вдохновение?


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

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

Похоже, что вы не можете без родного кода и мышки, так как это зависит от ОС.

Для дальнейшего обсуждения см Is it possible to have a MouseMotionListener listen to all system mouse motion events?

+0

Если я не читаю ваш код правильно, это просто имитирует нажатие клавиши, а не прием нажатой клавиши. Насколько я могу судить, сценарии совершенно не связаны. Чтобы уточнить: я не знаю, как добавить слушателя, чем слушать вне любого исполняемого java.Моя цель - использовать слушателя, когда я где-нибудь в другом месте (например, в другой программе). – Rhyono

+0

Мой ответ касался добавления слушателя к компоненту, чтобы остановить робота. Итак, суть вопроса заключается не в том, чтобы добавить слушателя, чтобы остановить класс робота, а как реагировать на события за пределами Java-приложения. Не могу с этим поделать. – edwardsmatt

+0

У меня было это плохо сформулированное из-за моей собственной неопытности с попыткой этого; Спасибо за ответ. – Rhyono

4

Как сказал Эдвард, там, кажется, не быть способ сделать именно то, что я искал. Поэтому этот ответ должен объяснить, как я получил приемлемую замену.

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

MouseInfo.getPointerInfo().getLocation() 

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

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

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

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

Смежные вопросы