JEdit Macro - Apri e salva file
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 .
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.
- utilizza il valore restituito di jEdit.openFile (), questo è già il buffer, non è necessario getBuffer ()
- 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: - )