Вопрос

У меня есть макрос JEdit (BeanShell), который открывает определенный файл, а затем сразу же сохраняет файл в моей папке c: \ temp (чтобы случайно не обновить реальный файл).

Вот код оболочки бина:

logFilePath = "c:\\temp\\aj.txt";
jEdit.openFile( view , logFilePath );
_buffer = jEdit.getBuffer(logFilePath);
_buffer.save(view,"c:\\temp\\backup.txt",true);

Это дает мне следующую ошибку:

I/O Error
Each buffer can only execute one input/output operation at a time.  
Please wait until the current operation finishes 
(or abort it in the I/O progress monitor) before starting another one.  

Я попытался добавить цикл while, чтобы дождаться, пока buffer.isLoaded () станет истинным, но это просто заходит в бесконечный цикл.
Кажется, что работает - это всплывающее окно сообщения ( Macros.message ). Тем не менее, я действительно не хочу иметь этот ненужный диалог.

Я не знаю много Java, поэтому, пожалуйста, скажите мне, если я делаю ошибку новичка.

Обновление:

Добавил мой собственный ответ, чтобы показать код, на который указывает ответ Сергея .

Это было полезно?

Решение

Вы можете попробовать это решение , вызвав VFSManager. waitForRequests ();.

Другие советы

Это работает

На этот код указывает ответ Сергея выше. ,

Добавить VFSManager.waitForRequests (); после команды jEdit.openFile () .

Полный код

logFilePath = "c:\\temp\\aj.txt";
jEdit.openFile( view , logFilePath );

VFSManager.waitForRequests();

/* 
    VFSManager.waitForRequests();

    jEdit waits then for the file to be completely loaded before continuing 
    ... It's designed for waiting on all 'pending I/O requests'".
*/

_buffer = jEdit.getBuffer(logFilePath);
_buffer.save(view,"c:\\temp\\backup.txt",true);

Вы также можете сделать это менее жирным шрифтом.

<Ол>
  • используйте возвращаемое значение jEdit.openFile (), это уже Buffer, нет необходимости в getBuffer ()
  • Не вызывайте VFSManager.waitForRequests (), который ожидает выполнения ВСЕХ запросов, а просто добавьте BufferListener в буфер, который вы получили от jEdit.openFile (), и выполните вызов save в методе bufferLoaded этого слушателя: - )
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top