Макрос JEdit - открывает и сохраняет файл - PullRequest
1 голос
/ 17 ноября 2008

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

Обновление:

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

Ответы [ 3 ]

4 голосов
/ 17 ноября 2008

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

3 голосов
/ 18 ноября 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);
0 голосов
/ 27 сентября 2013

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

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