Pergunta

Eu tenho uma macro JEdit (BeanShell) que abre um arquivo específico, em seguida, imediatamente salva o arquivo para o meu c: \ Temp (para que eu não possa atualizar o arquivo real).

Aqui está o código shell bean:

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

Isso me dá o seguinte erro:

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.  

Eu tentei adicionar um loop while que esperar até buffer.isLoaded() é verdade, mas que só entra em um loop infinito.
O que parece trabalho está aparecendo uma caixa de mensagem ( Macros.message ). No entanto, eu realmente não quero ter esse diálogo desnecessário.

Eu não sei muito java, então por favor me diga se eu estou fazendo um erro de principiante.

Update:

Adicionado a minha própria resposta para mostrar o código apontou para a partir de Serhii resposta .

Foi útil?

Solução

Você pode tentar esta solução , VFSManager.waitForRequests(); chamando.

Outras dicas

Isso funciona

Este é o código apontado por de Serhii resposta , acima .

Add VFSManager.waitForRequests(); após o comando jEdit.openFile() .

Código completa
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);

Você também pode fazê-lo menos ousados.

  1. usar o valor de retorno de jEdit.openFile (), este já é o tampão, não há necessidade de GetBuffer ()
  2. Não chame VFSManager.waitForRequests (), que aguarda todos os pedidos para ser feito, mas simplesmente adicionar um BufferListener para o buffer que você tem de jEdit.openFile () e fazer o seu save chamada no método bufferLoaded deste ouvinte: - )
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top