OverlappingFileLockException при попытке заблокировать файловый канал

Предпосылки:

  • Я получаю OverlappingFileLockException каждый раз, когда пытаюсь заблокировать файл (это относится ко всем файлам)
  • У меня только что загруженная машина
  • Протестировано на как Windows / Linux, так и Eclipse, java v1.6
  • Только один экземпляр Eclipse работает с этой единственной программой
  • В этой программе работает только один поток (поток диспетчеризации событий)
  • Я пытался заблокировать файлы, которые я никогда раньше не касался
  • Та же проблема с использованием как lock (), так и trylock ()
  • Переход с FileOutputStream () на RandomAccessFile () дает тот же результат

Я пытаюсь заблокировать файл в статической функции, Функция возвращает составной объект, содержащий канал и блокировку, поэтому можно использовать другую функцию, unlockFile (FileLocking fl), чтобы закрыть, затем канал и снять блокировку. Составной объектный класс выглядит так: `

   public class FileLocking {
    public FileChannel channel;
    public FileLock lock;

    public FileLocking(FileChannel f, FileLock l) {
        channel = f;
        lock = l;
    }

Функция, которая блокирует файл, выглядит так:

public static synchronized FileLocking lockFile(String fileName) {
FileLocking result = null;
FileChannel channel = null;
try {
    channel = new FileOutputStream(fileName).getChannel();
    FileLock lock = channel.lock();
    lock = channel.tryLock();
    result = new FileLocking(channel, lock);
} catch (Exception e) {
    Log(ERR, "Exception when locking " + e.getMessage());
    e.printStackTrace();
} finally {
    try {
        channel.close();
    } catch (IOException e) {
        Log(ERR, "IOE: " + e.getMessage());
        e.printStackTrace();
    }
}
return result;

}

В настоящее время я получаю следующую ошибку:

[ERR]: (pid:13) Exception when locking null
java.nio.channels.OverlappingFileLockException
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.checkList(Unknown Source)
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.add(Unknown Source)
at sun.nio.ch.FileChannelImpl.tryLock(Unknown Source)
at java.nio.channels.FileChannel.tryLock(Unknown Source)
at com.xxx.utils.FileLocking.lockFile(FileLocking.java:29)`

Пояснения и / или методы кодирования приветствуются.

5
задан ola1olsson 14 February 2012 в 13:18
поделиться