長時間実行ファイルオープン操作をキャンセルする方法はありますがキャンセル?上記の例では、長い遅延によるアンチウイルススキャン、マップされたネットワークドライブなどHOWTOは遅延FileInputStreamをファイルオープン
new FileInputStream("a_file_that_the_antivirus_" +
"will_process_for_minutes_before_returning.jar")
// process the contents...
、最初の行はブロックすることができますが、私たちは新しいを得た場合、私は(非同期的にその操作をキャンセルする方法を知りませんinputstreamオブジェクトの場合、キャンセルはin.close()と同じくらい簡単ですが、この問題はその場合ではありません)。おそらくNIOで - - あるいはすでに単純なThread.interrupt(としてのメカニズムがある)のオープンをキャンセルする
は、それが可能なオープンなプロセスを中断しますか?
OS:主にWindows XP +、Java 6+、ブロックは、通常、Eclipseのプラグインや自分の複雑なアプリケーションなど、より大きく深いjarファイルが原因です。
基本的にファイル全体の処理はすでにSwingWorkerで行われているので、問題はありません。問題は、ユーザーが操作をキャンセルしたい場合、私は確実にオープンをキャンセルすることができないということです - それは、ブロックされたスレッドを保持し、JVMは、例えば正常に終了することはできません。 – akarnokd
私は、別のスレッドでopenを実行し、wait/notifyを使ってそれが完了したことを検出することを考えています。待機は簡単に取り消すことができます。実際のオープンコールは、他のスレッドで実行を継続し、最終的に完了すると破棄されます。 –
それは本当ですが、「結局」は通常遅すぎます。 – akarnokd