2011-08-08 20 views
1

私のJavaプログラムでは、イベントを高速で連続して実行できるテキストコンポーネントがあります。テキストが変更されるたびに私は多くのバックグラウンド処理を行っているので、テキストコンポーネントの応答性が著しく低下する可能性があります。だからこそ私は遅延を導入したい:テキストコンポーネントが起動すると、付属のリスナーは、テキストコンポーネントが "落ち着いて"なるまで一定の時間(たとえば1秒)待ってから、独自の処理を開始する必要があります。Javaプログラムのイベント遅延

私が望むのは自分自身の単純な遅延メカニズムをロールオーバーするのは比較的簡単だと知っていますが、java.util.concurrentパッケージ(または他のシステムパッケージ)にこのための既成のソリューションがあるかどうか疑問です。私は

Executors.newScheduledThreadPool(int) 

に見てきたが、これはすべて着信イベントを発生させますので、これは、私が探しているものをしていないようです - 私はそれを通じ作るために正確に一つイベントをしたいです遅延後にリスナーに送信されます。

ありがとうございます。

答えて

1

あなたはソリューションに非常に近いです。

あなたが望むのは、リスナーの発射を1秒後に起こすようにスケジュールすることですが、次のイベントが到着したときにキャンセルして再スケジューリングすることです。エグゼキュータを使用するのは合理的ですが、キーはFutureオブジェクトの周りに保存する必要があることです。つまり、キャンセルすることです。

+0

ニースの回答!私自身の解決策を動かすことが '未来'を乱すより簡単ではないかと思うが、私には不思議に思う。 –

+0

@python:そうではありません。最も簡単な解決策は、既存のコードを使用することです。幸いにも、重要なのは、 'schedule'によって返されたオブジェクトをキャンセルできることだけです。残りの部分は、作品をどのように組み立てるかを知っているだけです(ここで私はパターンを他の場所で見た利点があります:-))。 –