Robot クラスを使用して、いくつかの条件に従ってマウスを動かす単純なコードを Java で作成しました。
コードは問題なく動作しますが、他のアプリケーションが実行されているときに「ラグ」があるようです。
Java には、システム メッセージのポストに問題があると思います。
これを回避する回避策はありますか?
遅延を減らすことを考える前に、まずその原因を理解する必要があります。「なぜ」と「何をすべきか」がわかる形で答えを提示します。
他のプログラムがロボットと一緒に実行されている場合にのみ遅延が発生するという説明によると、遅延の最も可能性の高い原因は次のとおりです。
システム リソースの不足- 同時に実行されているものが多すぎるため、メモリ/処理能力が過剰に消費されるため、OS は他のプログラムを実行できるようにするために一部のプログラムの速度を低下させます。
対処方法:このような問題を修正するには、コードを最適化して、使用するメモリ/処理能力を減らし、ラグの原因を減らし、暗黙的にラグ自体を減らすことができます。残念ながら、サードパーティのプログラムに対して同じことを合法的に行うのは難しいため、並行アプリケーションがあなたのものでない場合、ラグを完全に取り除くことはほとんどできません.
レプリケート不可、共有不可のコンポーネントに関する同時実行性- 一度に複数のプロセスからアクセスできず、複数のインスタンスに複製できない 1 つ以上のコンポーネントは、実行中の複数のプロセスで使用する必要があります。1 つのプロセスがそれを制御している間、他のプロセスはコンポーネントが解放されるのを待つしかありません。
対処法:この場合、並行プロセスの優先度を上げて優先度を下げる (プログラムをより速く実行するために効果的に遅くする) か、完全にシャットダウンする以外に合法的な方法はほとんどありません。
方法:プロセスの優先度を上げるには、これを 80% (デフォルトは通常 50%) に設定するコードを以下に示しますmain()
。
Thread.currentThread().setPriority((int)(Thread.MAX_PRIORITY*0.8));
Thread.MAX_PRIORITY
注:を乗算せずに使用して0.8
、必要なコンポーネントを「決して」解放しないようにプロセスを設定できますが、コンポーネントを必要とするプロセスをほとんど一時停止するため、お勧めしません (その間にそれらをシャットダウンするのとほぼ同じです)。あなたのプログラムは実行されています)、何らかの理由でプログラムがハングした場合は、コンポーネントがリリースされないため、それらもハングします。