4

java.awt.Robot終了条件が満たされるまで、を無限ループで駆動することを唯一の目的とするプログラムがあります。

ロボットは多数のアクションをすばやく連続して実行しますが、これらのアクション間には標準のUI遅延が必要です。このために、私はjava.awt.Robot.setAutoDelay(int ms)、まさにこの目的のために設計されているように見えるを使用します。

ただし、それ以外の場合は、操作を完了するために任意に長い遅延を挿入する必要があります。私はどちらを使用するかを選択java.awt.Robot.delay(int ms)できるjava.lang.Thread.sleep(long ms)ようで、それらの違いは何で、どちらを使用すべきか興味があります。

私の直感は、すべての操作を同じ「場所」に保ち、を使用することjava.awt.Robot.delay(int ms)でした。しかし、少し考えてみるとjava.awt.Robot.delay(int ms)、ロボットの操作のスタックに操作が完了すると思いました。それが無限ループでの唯一の遅延である場合、非常に迅速に、そして不必要に、途方もなく大きなものを生成する可能性があります。ロボットのイベントのキュー。

その時点で、APIjava.awt.Robot.delay(int ms)をチェックしました。これにより、次のことがわかりました。

指定された時間スリープします。InterruptedException発生するをキャッチするには、Thread.sleep()代わりにを使用できます。

問題についての有用な洞察を得ることができなかったので、私は皆さんに尋ねることを選びました。

4

2 に答える 2

2

最初はdelay()、特に次のjavadocを読んだ後、を使用するとイベントの大きなキューが生成されると思いwaitForIdle()ます。

現在イベントキューにあるすべてのイベントが処理されるまで待機します

しかし、のソースコードをチェックすると、遅延時間が正で1分以内であることを確認した後、 Robot.delay()基本的にはであることがわかります。Thread.sleep()

要約:両方のソリューションはほぼ同じThread.sleep()です。1分より長く遅延するか、InterruptedExceptionをキャッチするために使用します。

Javaで何年もプログラミングした後、InterruptedExceptionをキャッチせずにスリープする方法を見つけました(ロボット作成のオーバーヘッドを無視して)

于 2010-07-07T22:09:11.687 に答える
1

しかし、少し考えた後、java.awt.Robot.delay(int ms)がロボットの操作のスタックに操作を入れて完了すると思いました。それが無限ループでの唯一の遅延である場合、私は非常に迅速に、そして不必要に、ロボットのイベントの途方もなく大きなキューを生成する可能性があります。

あなたの恐れは根拠がありません。このdelay(int)メソッドは、javadocが言うことを正確に実行します。Robotインスタンスのキューに「delayforsolong」イベントを挿入するのではなく、呼び出しスレッドを遅延させます。

于 2010-07-07T22:38:21.300 に答える