2

私は最近Robotクラスで遊んでいて、やりたいことをやっていますが、ユーザー入力を介してそのアクションを中断/停止する方法がわかりません。

例:デスクトップを100回クリックしたいのですが、終了(または一時停止)したいという点で40回のクリックを決定しました。

特定のキーを押すか、マウスの中ボタンを押して停止するように指示するなど、簡単なことを実行できるようにしたいと思います。これを行うには、ロボットが実行しているアクションが他のプログラムにあるため、Javaアプリケーションの外部で入力をリッスンできる必要があります。

4

2 に答える 2

4

エドワードが言ったように、私が探していたものを正確に行う方法はないようです。したがって、この答えは、私がどのようにして許容可能な代替品を達成したかを説明することです。

エドワードにリンクされた他の質問は、

MouseInfo.getPointerInfo().getLocation()

マウスが何をしているかに関係なく、マウス座標をフェッチすることができます。私のプログラムは、ロボットクラスを使用して、特定の座標範囲内でマウスを制御します。また、ユーザー入力を介してプログラムを無効にできるようにしたかったのです。

この結果を達成するために、マウスのx座標とy座標を、ロボットが最後に設定したx座標とy座標と比較しました。2つが一致しない場合、プログラムは終了します。

この方法でプログラムを一時停止すると、一時停止する前に元のx座標とy座標に戻る必要があるため、実用的ではありませんが、少なくとも、Javaの親プログラムに実際に焦点を当てずに停止を実現する方法の例を示しています。

プログラムを一時停止するには、代わりに座標を座標の範囲と比較します(座標に架空の2Dボックスを作成させます)。マウスの座標がその範囲内にある場合:一時停止。再開するには、反対のチェックを行います(マウスがその範囲内にない)。

于 2011-10-06T06:56:06.490 に答える
1

この回答のコードの一部を使用できる場合があります 。Javaで押したままのキーをシミュレートする

次に、ロボットコマンドでstopメソッドを呼び出すアクション、コンポーネントなどにリスナーを追加します。

それはあなたにいくつかのインスピレーションを与えますか?


編集さらに議論した後、本当の質問は次のとおりです。

Javaアプリケーション内の外部マウスイベント(Javaアプリケーション外)に応答するにはどうすればよいですか?

OSに依存しているため、ネイティブコードとマウスフックがないとできないようです。

詳細については、「MouseMotionListenerにすべてのシステムマウスモーションイベントをリッスンさせることは可能ですか?」を参照してください。

于 2011-10-05T22:11:34.433 に答える