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