2011-10-05 92 views
2

最近我一直在玩機器人課,我有它做我想做的,但我還沒有想出如何通過用戶輸入中斷/停止其行爲。聽衆與機器人類

例如:我想讓它點擊桌面一百次,但我決定點擊四十次,我想讓它退出(或暫停)。

我希望能夠做一些簡單的事情,比如按某個鍵或按下鼠標中鍵以使其停止。爲了做到這一點,它必須能夠監聽Java應用程序以外的輸入,因爲Robot正在執行的操作在其他程序中。

回答

1

您可以使用一些從這個答案的代碼: Simulate a key held down in Java

,然後添加一個監聽器以任何行動,組件,無論打電話的機器人命令停止方法。

這是否爲您提供了一些靈感?


編輯經進一步討論後,真正的問題是:

如何對外部鼠標事件(外Java應用程序)的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父母計劃。

爲了暫停程序,您將改爲將座標與一系列座標進行比較(讓座標創建一個虛構的2D框)。如果鼠標的座標在該範圍內:暫停。要恢復,請進行相反的檢查(鼠標不在該範圍內)。