Как диагностировать File.delete (), возвращение false / находит открытые потоки?

Я работаю с третьей стороной библиотека управления JPEG/EXIF (Mediautil), которая вызывает меня некоторые головные боли. Я хочу изменить данные изображения EXIF. Чтобы сделать это, я должен записать обновленную версию во временный файл, удалить оригинал и затем переименовать временный файл к настоящему имени.

Моя проблема состоит в том что File.delete() назовите сбои и возвраты false, по-видимому, потому что библиотеке все еще открыли его в некотором роде - но я сделал все, что я могу найти в API, чтобы заставить его закрыть все потоки. Еще хуже: проблема, кажется, иждивенец синхронизации и Модульные тесты, где она иногда происходит, сбой и иногда не - но код не является многопоточным.

Причудливо, существует один вызов библиотеки, который удаляет проблему - но это также удаляет миниатюру EXIF, которую я на самом деле не хочу. И смотря на код, я абсолютно не вижу, где он закрывает любые потоки, которые могли бы иначе остаться открытыми.

Какие-либо идеи, как приняться за решение этой проблемы?

Править: Это находится на Windows XP, Java 6. И другая вещь: Я узнал это, если я звоню System.gc() перед вызовом File.delete(), это работает - по-видимому, потому что это инициировало некоторый финализатор. Таким образом, это определенно, кажется, открытый поток.

13
задан Michael Borgwardt 24 January 2010 в 21:16
поделиться