Domanda

Ho una macro JEdit (BeanShell) che apre un file specifico e poi salva immediatamente il file nella mia cartella c: \ temp (in modo da non aggiornare accidentalmente il file reale).

Ecco il codice shell bean:

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

Questo mi dà il seguente errore:

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.  

Ho provato ad aggiungere un ciclo while per attendere fino a quando buffer.isLoaded () è vero, ma questo va solo in un ciclo infinito.
Ciò che sembra funzionare è spuntare una finestra di messaggio ( Macros.message ). Tuttavia, non voglio davvero avere questo dialogo inutile.

Non conosco molto Java, quindi per favore dimmi se sto facendo un errore da principiante.

Aggiornamento:

Aggiunta la mia risposta per mostrare il codice indicato da la risposta di Serhii .

È stato utile?

Soluzione

Puoi provare questa soluzione , chiamando VFSManager. waitForRequests ();.

Altri suggerimenti

Funziona

Questo è il codice a cui punta Risposta di Serhii , sopra .

Aggiungi VFSManager.waitForRequests (); dopo il comando jEdit.openFile () .

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

Puoi anche farlo in meno grassetto.

  1. utilizza il valore restituito di jEdit.openFile (), questo è già il buffer, non è necessario getBuffer ()
  2. Non chiamare VFSManager.waitForRequests () che attende l'esecuzione di TUTTE le richieste, ma aggiungi semplicemente un BufferListener al buffer che hai ricevuto da jEdit.openFile () e fai la tua chiamata di salvataggio nel metodo bufferLoaded di questo listener: - )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top