Pregunta

Tengo una macro JEdit (BeanShell) que abre un archivo específico e inmediatamente guarda el archivo en mi carpeta c: \ temp (para que no actualice accidentalmente el archivo real).

Aquí está el código de shell de bean:

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

Esto me da el siguiente error:

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.  

He intentado agregar un ciclo while para esperar hasta que buffer.isLoaded () sea verdadero, pero eso solo entra en un ciclo infinito.
Lo que parece funcionar es abrir un cuadro de mensaje ( Macros.message ). Sin embargo, realmente no quiero tener este diálogo innecesario.

No sé mucho de Java, así que por favor dime si estoy cometiendo un error de novato.

Actualización:

Agregué mi propia respuesta para mostrar el código señalado desde Respuesta de Serhii .

¿Fue útil?

Solución

Puede probar esta solución , llamando a VFSManager. waitForRequests (); .

Otros consejos

Esto funciona

Este es el código señalado por la respuesta de Serhii , arriba .

Añadir VFSManager.waitForRequests (); después del comando jEdit.openFile () .

Código completo

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);

También puedes hacerlo menos audaz.

  1. use el valor de retorno de jEdit.openFile (), este ya es el Buffer, no es necesario getBuffer ()
  2. No llame a VFSManager.waitForRequests () que espera a que se realicen TODAS las solicitudes, simplemente agregue un BufferListener al Buffer que obtuvo de jEdit.openFile () y realice su llamada de guardado en el método bufferLoaded de este oyente: - )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top