Макрос JEdit — открыть и сохранить файл

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

Вот код оболочки bean-компонента:

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, поэтому, пожалуйста, скажите мне, если я совершаю ошибку новичка.

Обновлять:

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


person AJ.    schedule 17.11.2008    source источник


Ответы (3)


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

person Serxipc    schedule 17.11.2008

Это работает

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

Добавьте 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);
person AJ.    schedule 18.11.2008

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

  1. используйте возвращаемое значение jEdit.openFile(), это уже буфер, нет необходимости в getBuffer()
  2. Не вызывайте VFSManager.waitForRequests(), который ожидает выполнения ВСЕХ запросов, а просто добавьте BufferListener в буфер, который вы получили из jEdit.openFile(), и выполните вызов сохранения в методе bufferLoaded этого слушателя :-)
person Vampire    schedule 27.09.2013