2012-05-02 4 views
2

私はしばらくの間、この質問に対する解決策を見つけようとしてきました。スイングイベントバッファを作成するベストプラクティスは何ですか?このアイデアは、イベントが何度も発生する可能性があるため、mouseMovedなどのマウスジェスチャーからアクションをトリガーするときに、最後の呼び出しをトリガーするだけです。たとえば、Java Swing MouseEventのイベントバッファを書き込む方法は?

マウスを5回クリックした場合最初のクリックリスナーが実行されている間に4つがキューに入れられると、次の呼び出しは5番目の呼び出しになります。以前の呼び出しはすべてスキップされます。

私はExecutorクラスを使用していなければならないと思われます。なぜなら、未送信のタスクを削除することができるからです。すべての助けに感謝します!

+2

あなたはすべてのこれらのイベントがキューに入れられなっている場合は、 – ControlAltDel

答えて

2

user1291492です。これはまったく起こりません。 決しては、イベントハンドラで完了するのに数ミリ秒以上かかるコードを実行する必要があります。 SwingWorker documentationには例と説明が含まれています。最も重要な見積もりは

イベントディスパッチスレッドでは実行しないでください。そうしないと、アプリケーションが応答しなくなります。

は、元の質問に対処するために、2つのパターンが、私は通常、採用があります。

  1. USEフラグは、将来のある時点で実行されるべきアクションをマークします。しばらくの間他の作業がない場合は、すべてのフラグをチェックしてリセットし、適切な処置を実行します。

  2. ワーカースレッドのスケジューリングを行う場合は、そのスレッドへの参照を保持します。新しい仕事をスケジュールする前に、以前にスケジュールされた仕事をキャンセルしてください。 C#/ AsyncのCancellationTokensでよく使用されます。

+0

はあなたに感謝し、あなたの長い仕事を委任するSwingWorkersを使用することを検討してください!私は実際にSwingWorkerを使っていましたが、バックグラウンドタスクをキャンセルする良い方法を探していました。私はそれを試してみましょう。どうもありがとう! –

関連する問題