2

SwingWorkerをキャンセル/停止する方法についてはたくさんの情報があります。ただし、EDTから呼び出されたdoInBackround()ときに、メソッド内で開始された長期的なメソッドを停止する方法についての適切な解決策を見つけることができません。cancel

たとえば、を使用してメソッド内で再帰的なファイル検索が開始さdoInBackround()れ、EDTから呼び出された場合、ファイル検索をどのように中断できますか?org.apache.commons.io.FileUtils.listFiles(file, FileUtils.getFileFilter(), DirectoryFileFilter.DIRECTORY);cancel(true)

4

1 に答える 1

2

それを止めるには、バックグラウンドタスクからのコラボレーションが必要です。タスクがキャンセルされたかどうかを定期的にチェックし、キャンセルされた場合はできるだけ早く戻る必要があります。

したがって、listFiles()メソッドを自分で再実装し、各反復でタスクがキャンセルされていないことを確認するか、ダーティトリックを使用して、タスクがキャンセルされた場合はファイルフィルター内からランタイム例外をスローします(ファイルフィルター以降)listFiles()メソッドが検査するすべてのファイルに対して呼び出されます。

于 2012-06-21T11:02:22.293 に答える